目錄web
Shell是一個命令解釋器,它的做用是解釋和執行用戶輸入的命令及程序等,用戶輸入一條命令,Shell就解釋執行一條。 Shell存在於操做系統的最外層,負責直接與用戶對話,把用戶輸入的命令解釋給操做系統,並處理各類各樣的操做系統的輸出結果,輸出到屏幕返回給用戶,當咱們輸入系統用戶名和密碼,登陸到Linux後的全部操做都是由Shell解釋並執行的。
Shell命令是存在交互式和非交互式的兩種方式。
什麼是交互式:交互式模式就是在終端上執行,Shell等待你的輸入,而且當即執行你提交的命令。這種模式被稱做交互式,是由於Shell與用戶進行交互。這種模式也是大多數用戶很是熟悉的:登陸、執行一些命令、退出。當你退出後,Shell也終止了。
那什麼又是Shell非交互式:非交互式模式,以Shell Script(非交互)方式執行。在這種模式下,Shell不與你進行交互,而是讀取存放在文件中的命令,而且執行它們。當它讀到文件的結尾,Shell也就終止了。正則表達式
能夠經過打印"$-"變量的值(表明着當前設置的Shell選項),來區分交互式與非交互式Shell。 [root@qiudao ~]# echo $- himBH #交互式Shell [root@qiudao ~]# cat 1.sh \#!/bin/bash echo $- [root@qiudao ~]# sh 1.sh hB #非交互式Shell
01)h:hashall,打開這個選項後,Shell會將命令所在的路徑記錄下來,避免每次都要查詢。shell
02)i:interactive,包含這個選項說明當前的Shell是一個交互式的Shell。編程
03)m:monitor,打開監控模式,就能夠經過Job control來控制進程的中止、繼續,後臺或者前臺執行等。vim
04)B:braceexpand,大括號擴展。api
05)H:history,Shell會把咱們執行的命令記錄下來,能夠經過history命令查看。bash
01)系統的命令堆積在一塊兒,按照順序執行。服務器
02)特定的格式 + 特定的語法 + 系統的命令 = 文件網絡
03)以.sh爲結尾的文件運維
Shell腳本語言是實現Linux系統管理及自動化運維重要且必備的工具,Linux系統的底層及基礎應用軟件的核心大都涉及Shell腳本的內容。每個合格的Linux系統管理員或運維工程師,都須要熟練Shell腳本語言的編寫,並可以閱讀系統及各種軟件附帶的Shell腳本內容,只有這樣才能提高運維人員的工做效率,適應日益複雜的工做環境,減小沒必要要的重複性的工做,從而爲我的的職場發展奠基較好的基礎。
01)對vim編輯器能熟練使用,熟悉SSH終端及".vimrc"等的配置。
02)要有必定的Linux命令基礎,至少掌握80個以上Linux經常使用命令並能熟練使用。
03)要熟練掌握Linux正則表達式以及三劍客命令(grep、sed、awk)。
04)熟悉常見的Linux網絡服務部署、優化、日誌分析及排錯。
01)閱讀、模仿、閱讀、模仿
02)核心:多練-多思考-再練-再思考-堅持如此循環便可
03)掌握Shell腳本的各類常見語法
04)造成本身的腳本開發風格
05)從簡單作起,簡單判斷,簡單循環
06)多模仿、多離開參考資料練習、多思考
07)學會分析問題,逐漸造成編程思惟
08)編程變量名字規範,採用駝峯語法表示
09)不要拿來主義,特別針對新手
01)基礎配置:系統初始化操做、系統更新、內核調整、網絡、時區、SSH優化等。
02)安裝程序:LNMP、LAMP、MySQL、Nginx、Redis等。
03)配置變動:Nginx Conf、PHP Conf、MySQL Conf、Redis Conf等。
04)業務部署:Shell配合Git、Jenkins實現自動化部署PHP、Java代碼,以及代碼回滾。
05)平常備份:MySQL全備 + 增量 + binlog + crond + Shell腳本備份等。
06)信息採集:Zabbix + Shell: 對硬件、系統、服務、網絡的監控等。
07)日誌分析:ELK:取值->排序->去重->統計->分析等。
08)服務擴容/縮容:Zabbix + Shell
擴容: 監控服務器cpu, 如cpu負載持續80% + 觸發動做(腳本)
腳本: 調用api開通雲主機->初始化環境->加入集羣->對外提供訪問
縮容: 監控服務器cpu使用率20%->判斷有多少web節點->判斷是否超過預設->縮減到對應的預設狀態->變動負載的配置
Shell腳本開發規範及習慣很是重要,雖然這些規範不是必需要遵照的,但有了好的規範和習慣,能夠大大提高開發效率,並下降後期對腳本的維護成本。當多人協做開發時,你們有一個互相遵照的規範就顯得更重要了。哪怕是一我的開發,最好也採起一套固定的規範,這樣腳本更易讀、易於後期維護,最主要的是要讓本身養成一個一出手就是專業和規範的習慣。
01)腳本放在放在統一的目錄
# mkdir -p /scripts/
02)推薦使用vim編輯器編輯腳本(高亮顯示)
03)以.sh爲擴展名
04)規範的Shell腳本第一行會指出由哪一個程序(解釋器)來執行腳本中的內容。
#!/bin/bash 或 #!/bin/sh #如不指定Shell,默認以bash執行。
05)開頭的"#!"稱爲幻數,在執行Shell腳本的時候,內核會根據"#!"後的解釋器來肯定使用哪一個程序解釋腳本中的內容。注意:這一行必須在每一個腳本頂端的第一行,若是不是第一行則爲腳本註釋行。
06)附帶做者及版權信息。
07)腳本註釋:在Shell腳本中,跟在"#"後面的內容表示註釋。註釋部分不會被執行,僅給人看。註釋能夠自成一行,也能夠跟在命令後面,與命令同行。要養成寫註釋的習慣,方便本身與他人。最好不用中文註釋,由於在不一樣字符集的系統會出現亂碼。
08)成對的符號一次書寫完成。
09)循環的格式一次書寫完成。
Shell腳本是從上至下、從左至右依次執行每一行的命令及語句的,即執行完了一個命令後再執行下一個,若是在Shell腳本中遇到子腳本(即腳本嵌套)時,就會先執行子腳本的內容,完成後再返回父腳本繼續執行父腳本內後續的命令及語句。
一般狀況下,當Shell腳本執行時,會向系統內核請求啓動一個新的進程,以便在該進程中執行腳本的命令以及子Shell腳本。
Shell腳本的執行一般能夠採用如下幾種方式:
1)bash script-name或sh #無需執行權限 [root@qiudao ~]# cat oldboy.sh \#!/bin/bash pwd [root@qiudao ~]# ll oldboy.sh -rw-r--r-- 1 root root 16 2019-06-16 22:38 oldboy.sh [root@qiudao ~]# sh oldboy.sh /root 2)path/script-name或./script-name #必需要有執行權限 [root@qiudao ~]# /root/oldboy.sh -bash: /root/oldboy.sh: Permission denied [root@qiudao ~]# ./oldboy.sh -bash: ./oldboy.sh: Permission denied [root@qiudao ~]# chmod +x oldboy.sh [root@qiudao ~]# /root/oldboy.sh /root [root@qiudao ~]# ./oldboy.sh /root 3)source script-name或. #將腳本里的代碼調入到當前環境運行,無需執行權限 [root@qiudao ~]# cat test.sh \#!bin/bash ping baidu.com [root@qiudao ~]# sh test.sh >/dev/null \#另打開一個會話窗口查看進程 [root@qiudao ~]# ps -ef|grep test.sh root 13351 13263 0 22:42 pts/2 00:00:00 sh test.sh root 13387 13355 0 22:43 pts/0 00:00:00 grep --color=auto test.sh \#使用source來執行腳本 [root@qiudao ~]# source test.sh >/dev/null \#另外一個會話窗口查看進程 [root@qiudao ~]# ps -ef|grep test.sh root 13394 13355 0 22:43 pts/0 00:00:00 grep --color=auto test.sh [root@web01 ~]# ps -ef|grep ping root 15616 13965 0 09:47 pts/0 00:00:00 ping baidu.com root 15620 15591 0 09:47 pts/1 00:00:00 grep --color=auto ping
登陸shell:是須要用戶名、密碼登陸後才能進入的Shell。 非登陸shell:固然就不須要輸入用戶名和密碼便可打開的Shell,例如:直接命令"bash"就是打開一個新的非登陸Shell,在Gnome或KDE中打開一個"終端"(terminal)窗口程序也是一個非登陸Shell。 執行exit命令,退出一個Shell(登陸或非登陸Shell);執行logout命令,退出登陸Shell(不能退出非登陸Shell)。 /etc/profile文件是登陸Shell啓動後運行的第一個啓動腳本,它只爲登陸Shell運行;非登陸Shell不會引起這個腳本。 #登陸式shell配置文件執行順序 /etc/profile->/etc/profile.d/*.sh->~/.bash_profile->~/.bashrc->/etc/bashrc 每一個調用的腳本會依次撤銷前一個調用腳本中的改變,在退出登陸Shell時,咱們還能夠執行某些任務,如建立自動備份、清除臨時文件。把這些任務放在.bash_logout文件中。 #非登陸式shell配置文件執行順序 ~/.bashrc->/etc/bashrc->/etc/profile.d/*.sh PS:驗證使用echo在每行添加一個輸出便可,注意,要把輸出放在文件的第一行。
read [選項] 值 read -p(提示語句) -n(字符個數) -t(等待時間,單位爲秒) –s(隱藏輸入) eg: read –t 30 –p 「please input your name: 」 NAME echo $NAME read –s –p 「please input your age : 」 AGE echo $AGE read –n 1 –p 「please input your sex [M/F]: 」 GENDER echo $GENDER