一、複製/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以致少一個空白字符開頭的行的行首加#;shell
#1.sed 命令 #腳本文件 #/bin/bash cp /etc/rc.d/rc.sysinit /tmp #sed:文本行編輯器 #-i:對原文件直接進行編輯操做,默認sed是對模式空間的數據進行操做 #s/str1/str2/:將匹配到str1的內容替換成str2,&後向引用,即str1內容 sed -i 's/^[[:space:]]\+/#&/' /tmp/rc.sysinit #2.固然你也能夠直接對文本進行vi編輯 #末行模式下使用s進行文本替換 :%s/^[[:space:]]\+/#&/g
二、複製/boot/grub/grub.conf至/tmp目錄中,刪除/tmp/grub.conf文件中的行首的空白字符;編程
#腳本文件 [root@localhost week6]# cat second.sh #/bin/bash cp /boot/grub/grub.conf /tmp #^:行首匹配 #[:space:]:空白字符 #\+:至少一次 sed -i 's/^[[:space:]]\+//' /tmp/grub.conf #查看執行結果 [root@localhost week6]# cat /tmp/grub.conf # grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/sda2 # initrd /initrd-[generic-]version.img #boot=/dev/sda default=0 timeout=5 splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.32-431.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=33ddc759-09de-4936-845a-811c03ea3b08 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet initrd /initramfs-2.6.32-431.el6.x86_64.img
三、刪除/tmp/rc.sysinit文件中的以#開頭,且後面跟了至少一個空白字符的行的#和空白字符bash
sed 's/^#[[:space:]]\+//' /tmp/rc.sysinit
四、爲/tmp/grub.conf文件中前三行的行首加#號;編輯器
#地址定界 #1.全文匹配 #2.單地址 #:指定某行,/pattern/:pattern匹配到的全部行 #3.地址範圍 m,n;第m行到第n行 m,+n:第m行到m+n行 /part1/,/part2/:從part1匹配到的行到part2匹配到底行 #1,3:1~3行匹配 [root@localhost week6]# sed '1,3 s/^.*/#&/' /tmp/grub.conf ## grub.conf generated by anaconda ## ## Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/sda2 # initrd /initrd-[generic-]version.img
五、將/etc/yum.repos.d/CentOS-Media.repo文件中全部的enabled=0或gpgcheck=0的最後的0修改成1;ide
[root@localhost week6]# cat forth.sh #/bin/bash #由於要修改配置文件,我把它複製到/tmp底下進行操做 cp /etc/yum.repos.d/CentOS-Media.repo /tmp sed -i 's/enabled=0/enabled=1/g' /tmp/CentOS-Media.repo sed -i 's/gpgcheck=0/gpgcheck=1/g' /tmp/CentOS-Media.repo #查看執行結果 [root@localhost week6]# cat /tmp/CentOS-Media.repo # CentOS-Media.repo # # This repo can be used with mounted DVD media, verify the mount point for # CentOS-6. You can use this repo and yum to install items directly off the # DVD ISO that we release. # # To use this repo, put in your DVD and use it with the other repos too: # yum --enablerepo=c6-media [command] # # or for ONLY the media repo, do this: # # yum --disablerepo=\* --enablerepo=c6-media [command] [c6-media] name=CentOS-$releasever - Media baseurl=file:///media/CentOS/ file:///media/cdrom/ file:///media/cdrecorder/ gpgcheck=1 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
六、每4小時執行一次對/etc目錄的備份,備份至/backup目錄中,保存的目錄名爲形如etc-201608300202工具
#備份的方法比較多: #1.單獨文件備份 cp複製文件便可 #2.tar :文件歸檔 #3.rsync :文件同步 #4.dd:克隆分區 #還有不少,包括軟件工具啊 #*/4:每4個小時,若是能夠被24整除能夠直接這樣寫,不能整除則要寫腳本實現 [root@localhost cron]# cat sixth.sh #/bin/bash tar -zcvf /backup/etc-$(date +'%Y%m%d%H%M') /etc #進入編輯模式 [root@localhost week6]# crontab -e 0 */4 * * * /bin/bash /root/shell/cron/sixth.sh 注:若是直接用crontab -e編輯時,%要記得轉義,在crontab中%是有特殊含義的,表示換行。 /bin/tar zcvf /backup/etc-$(date +"\%Y\%m\%d\%H\%M") /etc/*
七、每週2,4,6備份/var/log/messages文件至/backup/messages_logs/目錄中,保存的文件名形如messages-20160830ui
[root@localhost cron]# cat seven.sh #/bin/bash cp /var/log/messages /backup/messages_logs/messages-$(date +'%Y%m%d') [root@localhost week6]# crontab -e 0 0 * * 2,4,6 /bin/bash /root/shell/cron/seven.sh
八、天天每兩小時取當前系統/proc/meminfo文件中的全部以S開頭的信息至/stats/memory.txt文件中this
#1.用grep實現,查出符合條件的行重定向生成到新文件中 #^:行首匹配 #>:重定向 0 */2 * * * grep "^S" /proc/meminfo > stats/memory.txt #2.用sed實現,w命令直接寫到新文件 0 */2 * * * sed "/^S/w stats/memory.txt" /proc/meminfo
九、工做日的工做時間內,每兩小時執行一次echo "howdy"url
#工做時間:8~17點 #工做日:週一到週五:1~5 0 8-17/2 * * 1-5 /bin/echo "howdy"
腳本編程練習spa
十、建立目錄/tmp/testdir-當前日期時間;
十一、在此目錄建立100個空文件:file1-file100
#第10題和11題我就放一個腳本啦 [root@localhost ~]# cat tenth.sh #/bin/bash filename=testdir-$(date +'%F-%H-%M-%S') mkdir /tmp/$filename if [ ! $? -eq 0 ];then echo "mkdir false" fi cd /tmp/$filename for i in $(seq 1 100);do touch file$i done #查看執行結果 [root@localhost ~]# ls /tmp/testdir-2016-09-11-08-04-48/ file1 file13 file18 file22 file27 file31 file36 file40 file45 file5 file54 file59 file63 file68 file72 file77 file81 file86 file90 file95 file10 file14 file19 file23 file28 file32 file37 file41 file46 file50 file55 file6 file64 file69 file73 file78 file82 file87 file91 file96 file100 file15 file2 file24 file29 file33 file38 file42 file47 file51 file56 file60 file65 file7 file74 file79 file83 file88 file92 file97 file11 file16 file20 file25 file3 file34 file39 file43 file48 file52 file57 file61 file66 file70 file75 file8 file84 file89 file93 file98 file12 file17 file21 file26 file30 file35 file4 file44 file49 file53 file58 file62 file67 file71 file76 file80 file85 file9 file94 file99
十二、顯示/etc/passwd文件中位於第偶數行的用戶的用戶名;
#1.sed:n:讀取匹配行的下一行到模式空間中,p-打印 #匹配第一行後,取出下一行到模式空間而後打印,打印的就是下一行即第二行。再匹配指針往下走就是第三行了,依次類推打印的就是偶數行了 #cut: -d:指定分隔符 -f:取第幾個字段 [root@localhost week6]# sed -n 'n;p' /etc/passwd | cut -d: -f1 bin adm sync halt uucp games ftp dbus vcsa avahi-autoipd #2. 2~2,從第二行開始,步進是2,第二次匹配就是第4行,第三次日後取兩行就是第6行,依次類推 #這裏用awk進行分割,-F:分隔符 ,print:打印 [root@localhost week6]# sed -n '2~2 p' /etc/passwd | awk -F : '{print $1}' bin adm sync halt uucp games ftp dbus vcsa avahi-autoipd
1三、建立10用戶user10-user19;密碼同用戶名;
#for循環列表 #1.直接列出 10,11,12,13,15,16,17,18,19 #2.整數列表 {10..19} 或者$(seq 10 [1] 19) #3.返回列表的命令 #4.glob #5.變量引用 $@,$* [root@localhost week6]# cat thirteen.sh #/bin/bash for i in $(seq 10 19);do username=user$i useradd $username #判斷上個命令是否執行成功,不成功則退出 if [ ! $? -eq 0 ];then echo "useradd $username failed" exit 2 fi echo $username | passwd --stdin $username done
1四、在/tmp/建立10個空文件file10-file19;
[root@localhost week6]# cat fourteen.sh #/bin/bash for i in $(seq 10 19);do touch /tmp/file$i done
1五、把file10的屬主和屬組改成user10,依次類推。
#/bin/bash for i in $(seq 10 19);do username=user$i #chown [OPTION]... [OWNER][:[GROUP]] FILE:修改文件的屬主和屬組 chown $username:$username file$i done