Shell腳本其實就是以一系列命令組合起來的文本文件,這些命令組合起來完成一個或者一項功能。因為Shell似乎是各UNIX系統之間通用的功能,并且經過POSIX(表示可移植操作系統接口Portable Operating System Interface of UNIX,縮寫為 POSIX)的標準化。因此,Shell腳本只要“用心寫”一次,即可應用到很多系統上。因此,之所以要使用Shell腳本不僅僅是基于:它的簡單性(簡潔地表達復雜的操作)和可移植性(腳本無須修改就可在不同的系統上執行),和它相對開發容易(可以在短時間內完成一個功能強大又妤用的腳本)也離不開。它的示例一般長下面這樣:
下面小編通過一些練習題來向你們講述shell的美
1、編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信息,包括主機名,IPv4地址,操作系統版本,內核版本,CPU型號,內存大小,硬盤大小。
小編解析*:
第8行:題目只要IPv4地址,所以使用ifconfig ens33,然后grep命令過濾出包含inet的那一行,最后tr命令把里面的空格轉變成一個就可以切出你想要的那一串數字啦
第9行:小編覺得這一行大家應該都知道,就是顯示版本號和內核信息的,記住這倆命令即可,其他的就不多說了。
第10行:與第8行相似,都是查詢過濾再進行切除。
第11行:我們看到兩個$符對不對,中括號里面的$符是用來引用小括號里面的那些查看過濾取行首等命令執行的結果,中括號外面的$符是用來計算的,看到/符沒,/1024就是 除以1024。(小編這里說的是不是有點繞)
第12行:相似與第8、10行,小編就不絮叨了。
結果顯示:
2、編寫腳本/root/bin/backup.sh,可實現將/etc/目錄備份到/root/etcYYYY-mm-dd中。
結果顯示:
3、編寫腳本/root/bin/disk.sh,顯示當前硬盤分區中空間利用率最大的值。
結果顯示:
4、編寫腳本/root/bin/links.sh,顯示正連接本主機的每個遠程主機的IPv4地址和連接數,并按連接數從大到小排序。
結果顯示:
5、編寫腳本/root/bin/sumid.sh,計算/etc/passwd文件中的第10個用戶和第20用戶的ID之和。
小編解析*:
第5、6行:這兩行長得很像哈。首先我們看到反引號把所有內容都引起來了,它這里就是把里面的內容當做一個命令來執行。
第7行:中括號里面的$符是分別引用第5、6行得出的user10和user20的結果;外面的$符是依題意要求計算他倆的和
第8行:輸出計算之后的和
結果如下:
[root@localhost bin]# ./sumid.sh
70
6、編寫腳本/root/bin/sumspace.sh,傳遞兩個文件路徑作為參數給腳本,計算這兩個文件中所有空白行之和。
小編解析*:
第5、6行:首先又是反引號,其作用如第5題,而grep后面加雙引號可以識別所輸入的變量;這道題所說的空白行就是由空格組成的行,也就是以空格開頭以空格結尾但是中間也是有內容的,內容就是這些space。^符就是以后面的space(空格)開頭,*號代表有很多空格,$符就是以前面的space結尾,$1,$2就是傳遞給腳本的參數,最后wc再進行行數統計。
第7、8行與第5題相似,也是計算并輸出結果。
結果顯示:
7、編寫腳本/root/bin/sumfile.sh,統計/etc, /var, /usr目錄中共有多少個一級子目錄和文件。
結果顯示:
[root@localhost bin]# ./sumfile.sh
304
8、編寫腳本/root/bin/argsnum.sh,接受一個文件路徑作為參數;如果參數個數小于1,則提示用戶“至少應該給一個參數”,并立即退出;如果參數個數不小于1,則顯示第一個參數所指向的文件中的空白行數
小編解析*:
第5行中的$@表示傳遞給腳本的所有參數,如果傳遞的有參數,就會顯示&&后面的小括號里統計出來的行數;如果沒有傳遞參數,就會輸出||后面的小括號里的“至少應該給一個參數”這句話。
方法二:
[[ $# -lt 1 ]] && echo “至少應該給一個參數!” || echo “第一個文件中有 `grep ‘^[[:space:]]*$’ $1|wc -l`個空白行“
這里小編用中括號進行判斷傳遞給腳本參數的個數($#)是否小于(lt)1,個數小于1就會顯示”至少應該給一個參數“這句話,不小于1就輸出||后面的統計結果。
結果顯示:
[root@localhost bin]# ./argsnum.sh
至少應該給一個參數
[root@localhost bin]# ./argsnum.sh /etc/login.defs
第一個文件中有 10個空白行
9、編寫腳本/root/bin/hostping.h,接受一個主機的IPv4地址做為參數,測試是否可連通。如果能ping通,則提示用戶“該IP地址可訪問”;如果不可ping通,則提示用戶“該IP地址不可訪問”
小編解析*:
這一題里,-c代表ping幾次,-w代表執行時間,小編這里是讓它ping1次然后用時1秒,不然ping起來沒完很費時間的啊。題目要求就是測試是否連通并沒說要結果,所以我們就可以把它ping的結果無論成功失敗都導入到垃圾桶(/dev/null)里面去,最后對應加上需要輸出的語言就可以了。
結果顯示:
10、編寫腳本/root/bin/checkdisk.sh,檢查磁盤分區空間和inode使用率,如果超過80%,就發廣播警告空間將滿。
小編解析*:
第5、6行這里就是通過轉換排序等命令得出最大值
第7、8行是判斷上面所得出的結果是否大于(gt)80,大于就要發廣播(wall命令),小于就顯示正常。
結果顯示:
第二種方法:
這種方法就是把方法1的判斷那兩行使用||合并成了一行,你們那么聰明,小編不多說了啊。
小編總結:關于shell腳本這一章就要多練題、多敲!
原創文章,作者:Qianzhihe,如若轉載,請注明出處:http://www.www58058.com/83878