next up previous contents
Next: 視 Shell 為一種程式語言 Up: Shell Scripts - 簡介與 Previous: Shell Scripts - 簡介與   Contents

前言

  • 何謂 Shell Script
    1. 文字介面下讓使用者與系統溝通的一個工具介面。
    2. 利用 shell 的功能所寫的一支『程式 (program)』。
    3. 將一些 shell 的語法與指令寫成純文字檔;
    4. 可搭配正規表示法、管線命令與資料流重導向等功能;
    5. shell script 更提供陣列、迴圈、條件與邏輯判斷等重要功能;
    6. 使用者也可以直接以 shell 來撰寫程式。
  • Shell scripts 執行流程:

    \begin{picture}(150,180)
\setlength{\unitlength}{1mm}
\put(35,55){\vector(-1,0)...
...er(15,0)(23,3)(30,0)}
\multiput(15,20)(0,15){3}{\vector(0,-1){5}}
\end{picture}
  • 為什麼要學習 shell scripts?
    1. 自動化管理的重要依據:自動處理分析主機狀態,若有問題才通知。
    2. 追蹤與管理系統的重要工作:Linux 系統的服務( services )啟動的介面,在目錄 /etc/init.d/ 下,所有的檔案都是 scripts。
    3. 簡單入侵偵測功能:主動分析系統登錄檔。
    4. 連續指令單一化:彙整在 command line 下達的連續指令。例如: /etc/rc.d/rc.local 裡的資料。
    5. 簡易的資料處理:處理數據資料的比對,文字資料的處理等。
    6. 跨平台支援與學習歷程較短:幾乎所有的 Unix Like 上面都可以跑 shell script 。
    7. shell script 是一項很好的系統管理工具,但數值運算的速度較慢,且使用的 CPU 資源較多。
  • Scripts 撰寫注意事項:
    1. 指令與參數間的多個空白會被忽略掉;
    2. 空白行及 [tab] 不會被理會;
    3. 讀到 [Enter] 符號,就開始執行該行命令;
    4. 一行的內容太多,可以使用 \[Enter] 來延伸至下一行;
    5. 加在 # 後面的字,全部被視為註解。
  • 如何執行檔案 shell.sh ?
    1. 將 shell.sh 加上可讀與執行 (rx) 的權限,就能夠以 ./shell.sh 執行;
    2. 直接以 sh shell.sh 方式執行。
  • 撰寫第一支 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    csie   First release
    
    echo -e "Hello World ! \a \n"
    exit 0
    
    1. 程式內容的宣告:script 當中,除了第一行的 #! 是用來宣告 shell 外,其他的 # 都是『註解』。
    2. 主要環境變數的宣告:例如 PATH。
    3. 主要程式部分: echo 選項 -e 代表解釋倒斜線 \ 跳脫字元。 \a 為警告;\n 為換行。
    4. 執行成果告知:
      1. 可以利用指令 exit 讓程式中斷,並且回傳一個數值給系統。
      2. 在此例中使用 exit 0 ,代表離開 script ,並且回傳 0 給系統。
      3. 指令執行成功與否,可下達 echo $? 觀察回傳值。
      4. 利用 exit n 的功能,可以自訂錯誤訊息。
    5. 執行結果
      [root@linux scripts]# sh sh01.sh
      Hello World !
      
  • 建立撰寫 shell script 的良好習慣,在每個 script 的檔頭記錄下列資訊,以助程式的改寫與 debug:
    1. script 的功能;
    2. script 的版本資訊;
    3. script 的作者與聯絡方式;
    4. script 的版權宣告方式;
    5. script 的 History (歷史紀錄);
    6. script 內較特殊的指令,使用絕對路徑的方式來下達;
    7. script 運作時需要的環境變數預先宣告與設定。

練習題

  1. Shell scripts 是二進位檔?
    Sol. 不是,是純文字檔
  2. Shell scripts 可提供陣列、迴圈、條件與邏輯判斷等重要功能?
    Sol.
  3. Linux 系統的服務是二進位執行檔?
    Sol. 不是,是純文字 Shell scripts 檔
  4. 只要是 Unix-like 系統,都可以執行 Shell scripts?
    Sol.
  5. Shell scripts 中註解的符號為何?
    Sol. #
  6. 一般 shell scripts 的副檔名為何?
    Sol. sh
  7. shell script 中第一行開頭,經常出現 #!,代表註解?
    Sol. 不是,是用來宣告用什麼程式執行 script
  8. shell script 中退出指令為何?
    Sol. exit
  9. shell script 中 exit 0,執行結果為何?
    Sol. 離開 script ,並且回傳 0 給系統。
  10. 如何觀察 shell script 執行回傳值?
    Sol. 下達 echo $?


next up previous contents
Next: 視 Shell 為一種程式語言 Up: Shell Scripts - 簡介與 Previous: Shell Scripts - 簡介與   Contents
2017-06-14