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