
什么是 Shell scripts ?
這個有趣的問題趕緊來回答看看,什么是 shell script 呢? shell 我們在 認識 bash 當中已經提過了,那是一個文字接口底下讓我們與系統(tǒng)溝通的一個工具接口,那么 script 是啥? 字面上的意義, script 是『腳本、劇本』的意思。整句話是說, shell script 是針對 shell 所寫的『劇本!』 什么東西啊?呵呵!其實, shell script 是利用 shell 的功能所寫的一個『程序 (program)』,這個程序是使用純文字文件,將一些 shell 的語法與指令寫在里面, 搭配正規(guī)表示法、管線命令與數據流重導向等功能,以達到我們所想要的處理目的。
所以,簡單的說, shell script 就像是早期 DOS 年代的批次檔 (.bat) ,最簡單的功能就是將許多指令匯整寫在一起, 讓使用者很輕易的就能夠 one touch (執(zhí)行一個檔案 "shell script" ,就能夠一次執(zhí)行多個指令), 而, shell script 更提供數組、循環(huán)、條件與邏輯判斷等重要功能,讓使用者也可以直接以 shell 來撰寫程序,而不必使用類似 C 程序語言等傳統(tǒng)程序撰寫的語法呢!
那,這么說您可以了解了嗎?是的! shell script 可以簡單的被看成是批次檔, 也可以被說成是一個程序語言,且這個程序語言由于都是利用 shell 與相關工具指令, 所以不需要編譯即可執(zhí)行,且擁有不錯的除錯 (debug) 工具,所以,他可以幫助系統(tǒng)管理員快速的管理好主機。
--------------------------------------------------------------------------------
干嘛學習 shell scripts?
這是個好問題,我又干嘛一定要學 shell script ?我又不是信息人,沒有寫程序的概念, 那我干嘛還要學 shell script 呢?不要學可不可以啊?呵呵~如果 Linux 對您而言, 您只是想要『會用』而已,那么,不需要學 shell script 也還無所謂,這部分先給他跳過去, 等到有空的時候,再來好好的瞧一瞧。但是,如果您是真的想要玩清楚 Linux 的來龍去脈, 那么 shell script 就不可不知,為什么呢?因為:
自動化管理的重要依據:
不用鳥哥說您也知道,管理一部主機真不是件簡單的事情,每天要進行的任務就有: 查詢登錄檔、追蹤流量、監(jiān)控使用者使用主機狀態(tài)、主機各項硬設備狀態(tài)、 主機軟件更新查詢、更不要說得應付其它使用者的突然要求了。而這些工作, 您想要自行手動處理,還是寫個簡單的程序來幫您每日自動處理分析,若有問題才通知您呢? 當然是讓系統(tǒng)自動工作比較好,對吧!呵呵~這就得要良好的 shell script 來幫忙的啦!
追蹤與管理系統(tǒng)的重要工作:
雖然我們還沒有提到服務啟動的方法,不過,這里可以先提一下,我們 Linux 系統(tǒng)的服務 ( services ) 啟動的接口,在 /etc/init.d/ 這個目錄下,所有的檔案都是 scripts ; 另外,包括開機 (booting) 過程也都是利用 shell script 來幫忙搜尋系統(tǒng)的相關設定數據, 然后再代入各個服務的設定參數??!舉例來說,如果我們想要重新啟動系統(tǒng)登錄文件, 可以使用:『/etc/init.d/syslogd restart』,那個 syslogd 檔案就是 script 啦! 另外,我曾經在某一代的 FC 上面發(fā)現,啟動 MySQL 這個數據庫服務時,確實是可以啟動的, 但是屏幕上卻老是出現『failure』,后來才發(fā)現,原來是啟動 MySQL 那個 script 會主動的以『空的密碼』去嘗試登入 MySQL ,但我修改過 MySQL 的密碼啰~當然就登入失敗~ 后來改了改 script ,就略去這個問題啦!如此說來, script 確實是需要學習的?。?/p>
簡單入侵偵測功能:
當我們的系統(tǒng)有異狀時,大多會將這些異狀記錄在系統(tǒng)記錄器,也就是我們常提到的『系統(tǒng)登錄文件』, 那么我們可以在固定的幾分鐘內主動的去分析系統(tǒng)登錄文件,若察覺有問題,就立刻通報管理員, 或者是立刻加強防火墻的設定規(guī)則,如此一來,您的主機可就能夠達到『自我保護』的聰明學習功能啦~ 舉例來說,我們可以通過 shell script 去分析『當該封包嘗試幾次還是聯機失敗之后,就予以抵擋住該 IP』之類的舉動,例如鳥哥寫過一個關于抵擋砍站軟件的 shell script , 就是用這個想法去達成的呢!
連續(xù)指令單一化:
其實,對于新手而言, script 最簡單的功能就是:『匯整一些在 command line 下達的連續(xù)指令,將他寫入 scripts 當中,而由直接執(zhí)行 scripts 來啟動一連串的 command line 指令輸出入!』例如: 防火墻連續(xù)規(guī)則 ( iptables ),開機加載程序的項目 ( 就是在 /etc/rc.d/rc.local 里頭的數據 ) ,等等都是相似的功能啦! 其實,說穿了,如果不考慮 program 的部分,那么 scripts 也可以想成,僅是幫我們把一大串的指令匯整在一個檔案里面, 而直接執(zhí)行該檔案就可以執(zhí)行那一串又臭又長的指令段!就是這么簡單啦!
簡易的數據處理:
由前一章 正規(guī)表示法 的 awk 程序說明中, 您可以發(fā)現, awk 可以用來處理簡單的數據數據呢!例如薪資單的處理啊等等的。 shell script 的功能更強大,例如鳥哥曾經用 shell script 直接處理數據數據的比對啊, 文字數據的處理啊等等的,撰寫方便,速度又快(因為在 Linux 效能較佳), 真的是很不錯用的啦!
跨平臺支持與學習歷程較短:
幾乎所有的 Unix Like 上面都可以跑 shell script ,連 MS Windows 系列也有相關的仿真器可以用, 此外, shell script 的語法是相當親和的,看都看的懂得文字,而不是機器碼, 很容易學習~這些都是您可以加以考慮的學習點??!
上面這些都是您考慮學習 shell script 的特點~此外, shell script 還可以簡單的以 vi 來直接編寫,實在是很方便的好東西!所以,還是建議您學習一下啦。
不過,雖然 shell script 號稱是程序 (program) ,但實際上, shell script 處理數據的速度上是不太夠的。因為 shell script 用的是外部的指令與 bash shell 的一些預設工具,所以,他常常會去呼叫外部的函式庫,因此,運算速度上面當然比不上傳統(tǒng)的程序語言。 所以啰, shell script 用在系統(tǒng)管理上面是很好的一項工具,但是用在處理大量數值運算上, 就不夠好了~而且還很麻煩,因為:Shell scripts 的速度較慢, 且使用的 CPU 資源較多,造成主機資源的分配不良。還好, 我們確實很少看到利用 shell script 在進行大量數據運算的,所以,不必擔心的啦!
--------------------------------------------------------------------------------
第一支 script 的撰寫與執(zhí)行
如同前面講到的, shell script 其實就是純文字文件 (ASCII) ,我們可以編輯這個檔案, 然后讓這個檔案來幫我們一次執(zhí)行多個指令,或者是利用一些運算與邏輯判斷來幫我們達成某些功能。 所以啦,要編輯這個檔案的內容時,當然就需要具備有 bash shell 指令下達的相關認識。 我們說過,要下達指令需要注意的事項在 bash 章節(jié)內已經提過, 在 shell script 的撰寫同樣需要用到這些注意事項的:
如同前面 bash command 提到的,指令與參數間的多個空白會被忽略掉;
而空白行也將被忽略掉!,并且 [tab] 也是不會被理會的!
如果讀取到一個 Enter 符號 ( CR )),就嘗試開始執(zhí)行該行命令;
至于如果一行的內容太多,則可以使用 [Enter] 來延伸至下一行;
此外,使用最多的 # 可做為批注!任何加在 # 后面的字,將全部被視為批注文字而被忽略!
如此一來,我們在 script 內所撰寫的程序,就會被一行一行的執(zhí)行。好了,那么這個程序假設文件名是 shell.sh 好了,如何執(zhí)行這個檔案?很簡單,可以有底下幾個方法:
將 shell.sh 加上可讀與執(zhí)行 (rx) 的權限,然后就能夠以 ./shell.sh 來執(zhí)行了;
直接以 sh shell.sh 的方式來直接執(zhí)行即可。
反正重點就是要讓那個 shell.sh 內的指令可以被執(zhí)行的意思啦!咦!那我為何需要使用 ./shell.sh 來下達指令? 還記得我們在 bash 里面一直強調的,指令是否能夠被執(zhí)行與 PATH 這個環(huán)境變量有關, 所以,要執(zhí)行『目前這個目錄下的某個檔案』就需要加上 ./ 這個目錄啦!另外,其實您也可以將 shell.sh 放在您家目錄下的 ~/bin 這個目錄中,然后利用 PATH="$PATH":~/bin 的設定, 嘿嘿,就能夠直接執(zhí)行您的 script 啰~ ^_^
那,為何 sh shell.sh 也可以執(zhí)行呢?這是因為 /bin/sh 其實就是 /bin/bash , 使用 sh shell.sh 亦即告訴系統(tǒng),我想要直接以 bash 的功能來執(zhí)行 shell.sh 這個檔案內的相關指令的意思。 而我們也可以利用 sh 的參數,如 -n 及 -x 來檢查與追蹤 shell.sh 的語法是否正確呢! ^_^
#p#副標題#e#
撰寫第一支 script
不論是那個門派,要學武功要從掃地做起,那么要學程序呢?呵呵,肯定是由『秀出 Hello World!』 這個字眼開始的!OK!那么鳥哥就先寫一支 script 給大家瞧一瞧:
[root@linux ~]# mkdir scripts; cd scripts
[root@linux scripts]# vi sh01.sh
#!/bin/bash
# Program:
# This program is used to show "Hello World !" in screen.
# History:
# 2005/08/23? VBird? First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo -e "Hello World ! a "
exit 0
在我們這個章節(jié)當中,請將所有的撰寫的 script 放置到您家目錄的 ~/scripts 這個目錄內, 比較好管理啦!上面的寫法當中,我主要將整個程序的撰寫
關鍵詞標簽:Linux,Shell Scripts
相關閱讀
熱門文章
安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程
Tomcat9.0如何安裝_Tomcat9.0環(huán)境變量配置方法
多種操作系統(tǒng)NTP客戶端配置
Linux操作系統(tǒng)修改IP
人氣排行 Linux下獲取CPUID、硬盤序列號與MAC地址 dmidecode命令查看內存型號 linux tc實現ip流量限制 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 linux下解壓rar文件 lcx.exe、nc.exe、sc.exe入侵中的使用方法 Ubuntu linux 關機、重啟、注銷 命令 查看linux服務器硬盤IO讀寫負載