第十三章、學習 Shell Scripts

來源:互聯網
上載者:User

標籤:style   http   os   使用   ar   strong   檔案   資料   div   

什麼是 Shell scripts

shell script (程式化指令碼) :shell script 是針對 shell 所寫的『指令碼!』

shell script 是利用 shell 的功能所寫的一個『程式 (program)』,這個程式是使用純文字檔,將一些 shell 的文法與命令(含外部命令)寫在裡面,搭配正規標記法、管線命令與資料流重導向等功能,以達到我們所想要的處理目的。

shell script 就像是早期 DOS 年代的批量檔 (.bat) ,最簡單的功能就是將許多命令彙整寫在一起,讓使用者很輕易的就能夠 以one touch 的方法去處理複雜的動作 (運行一個檔案 "shell script" ,就能夠一次運行多個命令)。

shell script 可以被看成是批量檔,也可以被說成是一個程式語言,且這個程式語言由於都是利用 shell 與相關工具命令,所以不需要編譯即可運行,且擁有不錯的除錯 (debug) 工具。

幹嘛學習 shell scripts

 

  • 自動化管理的重要依據:

    管理一部主機每天要進行的任務就有:查詢登入檔、追蹤流量、監控使用者使用主機狀態、主機各項硬體裝置狀態、主機軟體升級查詢。工作方式可以分為:(1)自行手動處理,或是 (2)寫個簡單的程式來幫你每日自動處理分析

  • 追蹤與管理系統的重要工作:

     Linux 系統的服務 (services) 啟動指令碼在 /etc/init.d/ 目錄下,目錄下的所有檔案都是 scripts ;另外,包括啟動 (booting) 過程也都是利用 shell script 來幫忙搜尋系統的相關配置資料,然後再代入各個服務的配置參數!舉例來說,如果我們想要重新啟動系統登入檔,可以使用:『/etc/init.d/syslogd restart』,那個 syslogd 檔案就是 script!

    另外,鳥哥曾經在某一代的 Fedora 上面發現,啟動 MySQL 這個資料庫服務時,確實是可以啟動的,但是螢幕上卻老是出現『failure』!後來才發現,原來是啟動 MySQL 那個 script 會主動的以『空的密碼』去嘗試登陸 MySQL ,但為了安全性鳥哥修改過 MySQL 的密碼,後來改了改 script ,就解決了這個問題!

  • 簡單入侵偵測功能:

    當我們的系統有異狀時,大多會將這些異狀記錄在系統記錄器,也就是我們常提到的『系統登入檔』,那麼我們可以在固定的幾分鐘內主動的去分析系統登入檔,若察覺有問題,就立刻通報管理員,或者是立刻加強防火牆的配置規則,如此一來,你的主機可就能夠達到『自我保護』。舉例來說,我們可以通過 shell script 去完成『當該封包嘗試幾次還是連線失敗之後,就予以抵擋住該IP』,例如鳥哥寫過一個關於抵擋砍站軟體的 shell script!

  • 連續命令單一化:

    『僅是幫我們把一大串的命令彙整在一個檔案裡面,而直接運行該檔案就可以運行那一串又臭又長的命令段!』

  • 簡易的資料處理:

      awk 可以用來處理簡單的資料!例如薪資單的處理等等的。如鳥哥曾經用 shell script 直接處理資料資料的比對啊,文字資料的處理等等的

  • 跨平台支援與學習曆程較短:

    幾乎所有的 Unix Like 上面都可以跑 shell script ,連 MS Windows 系列也有相關的 script 模擬器可以用,此外, shell script 的文法是相當親和的

 

shell script 處理資料的速度是不快。因為 shell script 用的是外部的命令與 bash shell 的一些預設工具,所以,他常常會去呼叫外部的函式庫,因此,運算速度上面比不上傳統程式語言。 shell script 用在系統管理上面是很好的一項工具,但是用在處理大量數值運算上,就不夠好了,因為 Shell scripts 的速度較慢,且使用的 CPU 資源較多,造成主機資源的分配不良。

第一支 script 的撰寫與運行

shell script是純文字檔

注意事項:

  1. 命令的運行是從上而下、從左而右的分析與運行;
  2. 命令的下達:命令、選項與參數間的多個空白都會被忽略掉;
  3. 空白行也將被忽略掉,並且 [tab] 按鍵所推開的空白同樣視為空白鍵;
  4. 如果讀取到一個 Enter 符號 (CR) ,就嘗試開始運行該行 (或該串) 命令;
  5. 如果一行的內容太多,則可以使用『 \[Enter] 』來延伸至下一行;
  6. 『 # 』可做為註解!任何加在 # 後面的資料將全部被視為註解文字而被忽略!

在 script 內所撰寫的程式會被一行一行的運行。現在我們假設你寫的這個程式檔名是/home/dmtsai/shell.sh 好了,如何運行:

  • 直接命令下達: shell.sh 檔案必須要具備可讀與可運行 (rx) 的許可權,然後:
    • 絕對路徑:使用 /home/dmtsai/shell.sh 來下達命令;
    • 相對路徑:假設工作目錄在 /home/dmtsai/ ,則使用 ./shell.sh 來運行
    • 變數『PATH』功能:將 shell.sh 放在 PATH 指定的目錄內,例如: ~/bin/
  • 以 bash 程式來運行:透過『 bash shell.sh 』或『 sh shell.sh 』來運行

 

/bin/sh 是 /bin/bash (連結檔),使用 sh shell.sh 亦即告訴系統,直接以 bash 的功能來運行 shell.sh 這個檔案內的相關命令,所以此時 shell.sh 只要有 r 的許可權即可被運行!也可以利用 sh 的參數,如 -n 及 -x來檢查與追蹤 shell.sh 的文法是否正確

  • 撰寫第一支 script

 

[[email protected] ~]# mkdir scripts; cd scripts[[email protected] scripts]# vi sh01.sh#!/bin/bash# Program:#       This program shows "Hello World!" in your screen.# History:# 2005/08/23VBirdFirst releasePATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport PATHecho -e "Hello World! \a \n"exit 0

 

  1. 第一行 #!/bin/bash 在宣告這個 script 使用的 shell 名稱:
    因為我們使用的是 bash ,所以,必須要以『 #!/bin/bash 』來宣告這個檔案內的文法使用bash 的文法!那麼當這個程式被運行時,他就能夠載入 bash 的相關環境配置檔 (一般來說就是 non-login shell 的 ~/.bashrc),並且運行 bash 來使我們底下的命令能夠運行!(在很多狀況中,如果沒有配置好這一行,那麼該程式很可能會無法運行,因為系統可能無法判斷該程式需要使用什麼 shell 來運行!)

  2. 程式內容的說明:
    整個 script 當中,除了第一行的『 #! 』是用來宣告 shell 的之外,其他的 # 都是『註解』用途!所以上面的程式當中,第二行以下就是用來說明整個程式的基本資料。一般來說,建議你一定要養成說明該 script 的:1. 內容與功能; 2. 版本資訊; 3. 作者與聯絡方式; 4. 建檔日期;5. 曆史紀錄 等等。這將有助於未來程式的改寫與 debug!

  3. 主要環境變數的宣告:
    建議務必要將一些重要的環境變數配置好,鳥哥個人認為, PATH 與 LANG (如果有使用到輸出相關資訊時) 是當中最重要的!如此一來,則可讓我們這支程式在進行時,可以直接下達一些外部命令,而不必寫絕對路徑呢!

  4. 主要程式部分
    就將主要的程式寫好即可!在這個例子當中,就是 echo 那一行啦!

  5. 運行成果告知 (定義回傳值)
    一個命令的運行成功與否,可以使用 $? 這個變數來觀察,可以利用 exit 這個命令來讓程式中斷,並且回傳一個數值給系統。在我們這個例子當中,鳥哥使用 exit 0 ,這代表離開 script 並且回傳一個 0 給系統,所以我運行完這個 script 後,若接著下達 echo $? 則可得到 0 的值!

 

[[email protected] scripts]# sh sh01.shHello World !

另外,你也可以利用:『chmod a+x sh01.sh; ./sh01.sh』來運行這個 script !

撰寫 shell script 的良好習慣建立

 

  • script 的功能;
  • script 的版本資訊;
  • script 的作者與聯絡方式;
  • script 的著作權宣告方式;
  • script 的 History (曆史紀錄);
  • script 內較特殊的命令,使用『絕對路徑』的方式來下達;
  • script 運行時需要的環境變數預先宣告與配置。

 

 

第十三章、學習 Shell Scripts

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.