1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#;

只有centos 6才有这文件

# cp /etc/rc.d/rc.sysinit /tmp/
# vim /tmp/rc.sysinit

输入:(进入末行模式)

:%s/^[[:space:]]/#&/

s/要查找的内容/替换为的内容/修饰符

%:全文, 相当于1,$

& :引用前面查找时查找到的整个内容


2、复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/grub.conf文件中的行首的空白字符;

# cp /boot/grub/grub.conf /tmp/
# vim /tmp/grub.conf

末行模式

:%s/^[[:space:]]\+//


3、删除/tmp/rc.sysinit文件中的以#开头,且后面跟了至少一个空白字符的行行的#和空白字符

题目不知所云

# vim /tmp/rc.sysinit

末行模式

:%s/^#[[:space:]]\+//

4、为/tmp/grub.conf文件中前三行的行首加#号;

# vim /tmp/grub.conf

末行模式

:1,3s/^/#&/

5、将/etc/yum.repos.d/CentOS-Media.repo文件中所有的enabled=0或gpgcheck=0的最后的0修改为1;

# vim /etc/yum.repos.d/CentOS-Media.repo

末行模式

:s/=0/=1/


6、每4小时执行一次对/etc目录的备份,备份至/backup目录中,保存的目录名为形如etc-201608300202

7、每周2,4,6备份/var/log/messages文件至/backup/messages_logs/目录中,保存的文件名形如messages-20160830

8、每天每两小时取当前系统/proc/meminfo文件中的所有以S开头的信息至/stats/memory.txt文件中

9、工作日的工作时间内,每两小时执行一次echo “howdy”

# date +%Y%m%d%H%M
201609101425

# crontab -e   #编辑定时任务
# crontab -l   #查询
# crontab -r  #移除所有任务

crontab文件格式 :分钟 小时 日 月 星期几 命令

spacer.gifwKioL1fUAnjwKmFGAAAk7GtRFpE441.png


*:代表每一个时间单位都执行一次,第一个“*”代表每分钟都执行一次(这里与具体时间单位容易混淆)

*/n : 每隔n个时间单位执行一次

n-M:连续时间范围

cp -a:  相当于-dR –preserv=all 复制时递归复制,保留所有属性,若来源文件为连结文件的属性(link file),则复制连结文件属性而非档案本身

+:指定时间格式,%Y表示年,%m表示月,%d表示日,%H表示小时,%M表示分钟

`命令` :反引号里面为命令

注意:需清楚*含义,由小到大进行具体时间单位(秒,分钟)定义


脚本编程练习

10、创建目录/tmp/testdir-当前日期时间;

# mkdir -pv /tmp/testdir-`date "+%F %T"`
mkdir: 已创建目录 "/tmp/testdir-2016-09-10"

-p: 存在于不报错,且可自动创建所需的各目录;

-v: 显示详细信息


11、在此目录创建100个空文件:file1-file100

#/bin/bash
#第一行指定解释脚本命令的程序
for i in `seq 100`;do
  touch file$i
 done

语法1

for 变量名 in 列表;do

      循环体

   done


语法2

for ((变量初始值;循环控制条件;变量变化表达式));do

      循环体

   done


12、显示/etc/passwd文件中位于第偶数行的用户的用户名;

#!/bin/bash
#
sed -n 'n;p' /etc/passwd | cut -d':' -f1

 

sed选项

-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。

sed命令

n: 读取匹配到的行的下一行至模式空间

p: 显示模式空间中的内容

cut命令

 -d’:’ -f1 以冒号为分隔符取第1字段


13、创建10用户user10-user19;密码同用户名;

#!/bin/bash
#
for i in {10..19};do
  id user$i &>/dev/null && echo "the user is exists" || useradd user$i && echo "user$i" |passwd --stdin user$i &>/dev/null
done

输出重定向

 &>:覆盖重定向(合并标准输出和错误输出为同一个数据流进行重定向)

&>/dev/null:标准输出重定向到空设备文件,不输出任何信息到终端


逻辑运算

&& 逻辑与

当命令1正确执行, 则命令2才会执行

当命令1执行不正确, 则命令2不会执行

|| 逻辑或

当命令1 执行不正确, 则命令2才会执行

当命令1正确执行, 则命令2不会执行


非交互方式修改用户密码

echo “PASSWORD” | passwd –stdin USERNAME


14、在/tmp/创建10个空文件file10-file19;

脚本

#!/bin/bash
#
for i in {10..19};do
    touch /tmp/file$i
done

 

命令行

# touch file{10..19}


15、把file10的属主和属组改为user10,依次类推。

#/bin/bash
#
for i in {10..19};do
    if [ -e /tmp/file$i ];then
      chown user$i:user$i /tmp/file$i
    else echo "no such file."
    fi
done

 

语法

if 双分支语句

if [条件判断式]

    then

        条件成立执行

    else

        条件不成立执行

fi