Shell腳本語言是實現linux系統自動化管理的重要且必要的工具,幾乎每一個合格的linux系統管理員或者高級運維工程師都要熟練shell腳本語言的編寫,只有這樣才能提升工作效率,解決工作中的重復勞動。(shell就是運維中的米飯,饅頭,其他高級語言都是錦上添花,運維首先要掌握shell,再去研究其他)
一、什么是shell 和shell腳本
shell是一個命令解釋器,在操作系統的最外層,負責直接與用戶對話,把用戶的輸入解釋給操作系統,並處理各種各樣的操作系統的輸出結果,輸出到屏幕反饋給用戶。這種對話方式是交互式的方式(鍵盤輸入並立即得到結果),或者非交互(腳本)的方式。
shell的英文就是貝殼,他在操作系統中的位置如圖:這里要注意,系統核心包括內核和各種庫。shell在其中就是一個跑腿的角色。
當linux命令或者語句不在命令行下執行,而是通過一個程序文件執行時,就是一個shell腳本或者shell程序。shell程序就像是DOS下的批處理(*.bat)。說白了就是命令、變量和流程控制的語句。
二、shell的編寫一定要規范嚴謹,只有這樣才能形成好的編寫習慣,事半功倍,並且有好的注釋,才能方便自己以后看或者方便他人進行查看。另外在腳本的開頭加上版權,時間、作者、email、作用、版本。
所謂的規范:統一,就是大家都這樣干
三、shell腳本在運維工作中的地位和作用
shell腳本擅長處理純文本類型的數據。而linux系統絕大多數服務都是純文本的。如apache、nginx、mysq、crond、nfs等軟件,你啟動、配置等都是用shell語言寫的,自然執行的shell腳本進行,因此地位超然就不言而喻了。
四、腳本語言的種類
1. bash\csh\tcsh,當前此contos系統支持的shell 如下,它是一個弱語言,最常用的就是bash,系統默認的也是bash,一個用戶的執行命令也是根據passwd中指定的shell語言進行解釋的
2.php是網頁程序,也是腳本語言,更專注於web網頁開發,但也可以處理系統日志、配置文件等。
3.perl腳本語言,比shell強大,語法靈活不易讀,團隊協作困難
4.python是腳本語言、web開發,中等以上的公司對python都有要求。
五、shell與php/perl/python語言的區別和優勢?
shell優勢是處理操作系統底層業務,因為有大量的系統命令支持,比如grep,awk,sed等,一鍵安裝、優化,監控報警腳本等,常規的應用,shell開發更簡單快速,符合運維大原則。(簡單、易用、高效)
其他語言在於web運維工具的開發,web管理工具,web業務開發有優勢,對於常規業務,完全可以用shell,用其他語言也可以實現,但你終究還是要調用系統函數,不如直接用shell實現。
總之,對於一個腳本、一個功能,可以用shell處理,可以用其他語言,那么不能說絕對,但是大多數情況下是shell占優勢,但是,大環境下,企業都喜歡可視化,web工具的優勢,喜歡一鍵就ok了,這也是python流行的原因所在,但還是要調用shell下的系統函數!
六、shell腳本的第一行
#!/bin/sh
1)如果第一行沒有上邊的內容,那么系統會調用默認的shell進行解釋腳本 ;當然也可以在執行腳本的時候進行指定,例如:bash xx.txt,這樣也是bash解釋器進行解釋
2)上面的內容可以用#!/bin/bash進行替換,sh只是bash的一個軟連接
[root@djw1 ~]# ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Jun 10 10:12 /bin/sh -> bash
七、shell版本,不同種類shell也是有版本,如下bash
八、shell腳本的執行
當shell腳本以非交互的方式運行時,它會先查找環境變量ENV,該變量指定了一個環境文件(.bashrc,.bash_profile,/etc/bashrc,/etc/profile等),然后從該環境變量文件開始執行,當讀取了ENV文件后,shell才開始執行腳本中的內容
例子:source xx.sh / . (點) xx.sh 這樣在xx.sh中如果有定義的變量,那么在外面的shell就可以調用此變量。