IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置:首頁操作系統(tǒng)LINUX → 鳥哥Linux私房菜之學(xué)習(xí)Shell Scripts(1)

鳥哥Linux私房菜之學(xué)習(xí)Shell Scripts(1)

時(shí)間:2015/6/28來源:IT貓撲網(wǎng)作者:網(wǎng)管聯(lián)盟我要評(píng)論(0)

  什么是 Shell scripts ?

  這個(gè)有趣的問題趕緊來回答看看,什么是 shell script 呢? shell 我們?cè)?認(rèn)識(shí) bash 當(dāng)中已經(jīng)提過了,那是一個(gè)文字接口底下讓我們與系統(tǒng)溝通的一個(gè)工具接口,那么 script 是啥? 字面上的意義, script 是『腳本、劇本』的意思。整句話是說, shell script 是針對(duì) shell 所寫的『劇本!』 什么東西。亢呛!其實(shí), shell script 是利用 shell 的功能所寫的一個(gè)『程序 (program)』,這個(gè)程序是使用純文字文件,將一些 shell 的語法與指令寫在里面, 搭配正規(guī)表示法、管線命令與數(shù)據(jù)流重導(dǎo)向等功能,以達(dá)到我們所想要的處理目的。

  所以,簡(jiǎn)單的說, shell script 就像是早期 DOS 年代的批次檔 (.bat) ,最簡(jiǎn)單的功能就是將許多指令匯整寫在一起, 讓使用者很輕易的就能夠 one touch (執(zhí)行一個(gè)檔案 "shell script" ,就能夠一次執(zhí)行多個(gè)指令), 而, shell script 更提供數(shù)組、循環(huán)、條件與邏輯判斷等重要功能,讓使用者也可以直接以 shell 來撰寫程序,而不必使用類似 C 程序語言等傳統(tǒng)程序撰寫的語法呢!

  那,這么說您可以了解了嗎?是的! shell script 可以簡(jiǎn)單的被看成是批次檔, 也可以被說成是一個(gè)程序語言,且這個(gè)程序語言由于都是利用 shell 與相關(guān)工具指令, 所以不需要編譯即可執(zhí)行,且擁有不錯(cuò)的除錯(cuò) (debug) 工具,所以,他可以幫助系統(tǒng)管理員快速的管理好主機(jī)。

  --------------------------------------------------------------------------------

  干嘛學(xué)習(xí) shell scripts?

  這是個(gè)好問題,我又干嘛一定要學(xué) shell script ?我又不是信息人,沒有寫程序的概念, 那我干嘛還要學(xué) shell script 呢?不要學(xué)可不可以啊?呵呵~如果 Linux 對(duì)您而言, 您只是想要『會(huì)用』而已,那么,不需要學(xué) shell script 也還無所謂,這部分先給他跳過去, 等到有空的時(shí)候,再來好好的瞧一瞧。但是,如果您是真的想要玩清楚 Linux 的來龍去脈, 那么 shell script 就不可不知,為什么呢?因?yàn)椋?/p>

  自動(dòng)化管理的重要依據(jù):

  不用鳥哥說您也知道,管理一部主機(jī)真不是件簡(jiǎn)單的事情,每天要進(jìn)行的任務(wù)就有: 查詢登錄檔、追蹤流量、監(jiān)控使用者使用主機(jī)狀態(tài)、主機(jī)各項(xiàng)硬設(shè)備狀態(tài)、 主機(jī)軟件更新查詢、更不要說得應(yīng)付其它使用者的突然要求了。而這些工作, 您想要自行手動(dòng)處理,還是寫個(gè)簡(jiǎn)單的程序來幫您每日自動(dòng)處理分析,若有問題才通知您呢? 當(dāng)然是讓系統(tǒng)自動(dòng)工作比較好,對(duì)吧!呵呵~這就得要良好的 shell script 來幫忙的啦!

  追蹤與管理系統(tǒng)的重要工作:

  雖然我們還沒有提到服務(wù)啟動(dòng)的方法,不過,這里可以先提一下,我們 Linux 系統(tǒng)的服務(wù) ( services ) 啟動(dòng)的接口,在 /etc/init.d/ 這個(gè)目錄下,所有的檔案都是 scripts ; 另外,包括開機(jī) (booting) 過程也都是利用 shell script 來幫忙搜尋系統(tǒng)的相關(guān)設(shè)定數(shù)據(jù), 然后再代入各個(gè)服務(wù)的設(shè)定參數(shù)啊!舉例來說,如果我們想要重新啟動(dòng)系統(tǒng)登錄文件, 可以使用:『/etc/init.d/syslogd restart』,那個(gè) syslogd 檔案就是 script 啦! 另外,我曾經(jīng)在某一代的 FC 上面發(fā)現(xiàn),啟動(dòng) mysql 這個(gè)數(shù)據(jù)庫服務(wù)時(shí),確實(shí)是可以啟動(dòng)的, 但是屏幕上卻老是出現(xiàn)『failure』,后來才發(fā)現(xiàn),原來是啟動(dòng) MySQL 那個(gè) script 會(huì)主動(dòng)的以『空的密碼』去嘗試登入 MySQL ,但我修改過 MySQL 的密碼啰~當(dāng)然就登入失敗~ 后來改了改 script ,就略去這個(gè)問題啦!如此說來, script 確實(shí)是需要學(xué)習(xí)的!

  簡(jiǎn)單入侵偵測(cè)功能:

  當(dāng)我們的系統(tǒng)有異狀時(shí),大多會(huì)將這些異狀記錄在系統(tǒng)記錄器,也就是我們常提到的『系統(tǒng)登錄文件』, 那么我們可以在固定的幾分鐘內(nèi)主動(dòng)的去分析系統(tǒng)登錄文件,若察覺有問題,就立刻通報(bào)管理員, 或者是立刻加強(qiáng)防火墻的設(shè)定規(guī)則,如此一來,您的主機(jī)可就能夠達(dá)到『自我保護(hù)』的聰明學(xué)習(xí)功能啦~ 舉例來說,我們可以通過 shell script 去分析『當(dāng)該封包嘗試幾次還是聯(lián)機(jī)失敗之后,就予以抵擋住該 IP』之類的舉動(dòng),例如鳥哥寫過一個(gè)關(guān)于抵擋砍站軟件的 shell script , 就是用這個(gè)想法去達(dá)成的呢!

  連續(xù)指令單一化:

  其實(shí),對(duì)于新手而言, script 最簡(jiǎn)單的功能就是:『匯整一些在 command line 下達(dá)的連續(xù)指令,將他寫入 scripts 當(dāng)中,而由直接執(zhí)行 scripts 來啟動(dòng)一連串的 command line 指令輸出入!』例如: 防火墻連續(xù)規(guī)則 ( iptables ),開機(jī)加載程序的項(xiàng)目 ( 就是在 /etc/rc.d/rc.local 里頭的數(shù)據(jù) ) ,等等都是相似的功能啦! 其實(shí),說穿了,如果不考慮 program 的部分,那么 scripts 也可以想成,僅是幫我們把一大串的指令匯整在一個(gè)檔案里面, 而直接執(zhí)行該檔案就可以執(zhí)行那一串又臭又長(zhǎng)的指令段!就是這么簡(jiǎn)單啦!

  簡(jiǎn)易的數(shù)據(jù)處理:

  由前一章 正規(guī)表示法 的 awk 程序說明中, 您可以發(fā)現(xiàn), awk 可以用來處理簡(jiǎn)單的數(shù)據(jù)數(shù)據(jù)呢!例如薪資單的處理啊等等的。 shell script 的功能更強(qiáng)大,例如鳥哥曾經(jīng)用 shell script 直接處理數(shù)據(jù)數(shù)據(jù)的比對(duì)啊, 文字?jǐn)?shù)據(jù)的處理啊等等的,撰寫方便,速度又快(因?yàn)樵?Linux 效能較佳), 真的是很不錯(cuò)用的啦!

  跨平臺(tái)支持與學(xué)習(xí)歷程較短:

  幾乎所有的 Unix Like 上面都可以跑 shell script ,連 MS Windows 系列也有相關(guān)的仿真器可以用, 此外, shell script 的語法是相當(dāng)親和的,看都看的懂得文字,而不是機(jī)器碼, 很容易學(xué)習(xí)~這些都是您可以加以考慮的學(xué)習(xí)點(diǎn)。

  上面這些都是您考慮學(xué)習(xí) shell script 的特點(diǎn)~此外, shell script 還可以簡(jiǎn)單的以 vi 來直接編寫,實(shí)在是很方便的好東西!所以,還是建議您學(xué)習(xí)一下啦。

  不過,雖然 shell script 號(hào)稱是程序 (program) ,但實(shí)際上, shell script 處理數(shù)據(jù)的速度上是不太夠的。因?yàn)?shell script 用的是外部的指令與 bash shell 的一些預(yù)設(shè)工具,所以,他常常會(huì)去呼叫外部的函式庫,因此,運(yùn)算速度上面當(dāng)然比不上傳統(tǒng)的程序語言。 所以啰, shell script 用在系統(tǒng)管理上面是很好的一項(xiàng)工具,但是用在處理大量數(shù)值運(yùn)算上, 就不夠好了~而且還很麻煩,因?yàn)椋篠hell scripts 的速度較慢, 且使用的 CPU 資源較多,造成主機(jī)資源的分配不良。還好, 我們確實(shí)很少看到利用 shell script 在進(jìn)行大量數(shù)據(jù)運(yùn)算的,所以,不必?fù)?dān)心的啦!

  --------------------------------------------------------------------------------

  第一支 script 的撰寫與執(zhí)行

  如同前面講到的, shell script 其實(shí)就是純文字文件 (ASCII) ,我們可以編輯這個(gè)檔案, 然后讓這個(gè)檔案來幫我們一次執(zhí)行多個(gè)指令,或者是利用一些運(yùn)算與邏輯判斷來幫我們達(dá)成某些功能。 所以啦,要編輯這個(gè)檔案的內(nèi)容時(shí),當(dāng)然就需要具備有 bash shell 指令下達(dá)的相關(guān)認(rèn)識(shí)。 我們說過,要下達(dá)指令需要注意的事項(xiàng)在 bash 章節(jié)內(nèi)已經(jīng)提過, 在 shell script 的撰寫同樣需要用到這些注意事項(xiàng)的:

  如同前面 bash command 提到的,指令與參數(shù)間的多個(gè)空白會(huì)被忽略掉;

  而空白行也將被忽略掉!,并且 [tab] 也是不會(huì)被理會(huì)的!

  如果讀取到一個(gè) Enter 符號(hào) ( CR )),就嘗試開始執(zhí)行該行命令;

  至于如果一行的內(nèi)容太多,則可以使用 [Enter] 來延伸至下一行;

  此外,使用最多的 # 可做為批注!任何加在 # 后面的字,將全部被視為批注文字而被忽略!

  如此一來,我們?cè)?script 內(nèi)所撰寫的程序,就會(huì)被一行一行的執(zhí)行。好了,那么這個(gè)程序假設(shè)文件名是 shell.sh 好了,如何執(zhí)行這個(gè)檔案?很簡(jiǎn)單,可以有底下幾個(gè)方法:

  將 shell.sh 加上可讀與執(zhí)行 (rx) 的權(quán)限,然后就能夠以 ./shell.sh 來執(zhí)行了;

  直接以 sh shell.sh 的方式來直接執(zhí)行即可。

  反正重點(diǎn)就是要讓那個(gè) shell.sh 內(nèi)的指令可以被執(zhí)行的意思啦!咦!那我為何需要使用 ./shell.sh 來下達(dá)指令? 還記得我們?cè)?bash 里面一直強(qiáng)調(diào)的,指令是否能夠被執(zhí)行與 PATH 這個(gè)環(huán)境變量有關(guān), 所以,要執(zhí)行『目前這個(gè)目錄下的某個(gè)檔案』就需要加上 ./ 這個(gè)目錄啦!另外,其實(shí)您也可以將 shell.sh 放在您家目錄下的 ~/bin 這個(gè)目錄中,然后利用 PATH="$PATH":~/bin 的設(shè)定, 嘿嘿,就能夠直接執(zhí)行您的 script 啰~ ^_^

  那,為何 sh shell.sh 也可以執(zhí)行呢?這是因?yàn)?/bin/sh 其實(shí)就是 /bin/bash , 使用 sh shell.sh 亦即告訴系統(tǒng),我想要直接以 bash 的功能來執(zhí)行 shell.sh 這個(gè)檔案內(nèi)的相關(guān)指令的意思。 而我們也可以利用 sh 的參數(shù),如 -n 及 -x 來檢查與追蹤 shell.sh 的語法是否正確呢! ^_^

#p#副標(biāo)題#e#

  撰寫第一支 script

  不論是那個(gè)門派,要學(xué)武功要從掃地做起,那么要學(xué)程序呢?呵呵,肯定是由『秀出 Hello World!』 這個(gè)字眼開始的!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

  在我們這個(gè)章節(jié)當(dāng)中,請(qǐng)將所有的撰寫的 script 放置到您家目錄的 ~/scripts 這個(gè)目錄內(nèi), 比較好管理啦!上面的寫法當(dāng)中,我主要將整個(gè)程序的撰寫

關(guān)鍵詞標(biāo)簽:Linux,Shell Scripts

相關(guān)閱讀

文章評(píng)論
發(fā)表評(píng)論

熱門文章 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程使用screen管理你的遠(yuǎn)程會(huì)話使用screen管理你的遠(yuǎn)程會(huì)話GNU/Linux安裝vmwareGNU/Linux安裝vmware如何登錄linux vps圖形界面 Linux遠(yuǎn)程桌面連如何登錄linux vps圖形界面 Linux遠(yuǎn)程桌面連

相關(guān)下載

人氣排行 Linux下獲取CPUID、硬盤序列號(hào)與MAC地址linux tc實(shí)現(xiàn)ip流量限制dmidecode命令查看內(nèi)存型號(hào)linux下解壓rar文件安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程Ubuntu linux 關(guān)機(jī)、重啟、注銷 命令lcx.exe、nc.exe、sc.exe入侵中的使用方法查看linux服務(wù)器硬盤IO讀寫負(fù)載