next up previous contents
Next: shell script 練習 Up: Shell Scripts - 簡介與 Previous: 前言   Contents

視 Shell 為一種程式語言

  • 撰寫 shell 程式的方法:
    1. 互動式(interactive)程式:輸入一連串的命令,並允許 shell 立即執行。
      $ for file in *
      > do
      > if grep -l POSIX $file
      > then
      > more $file
      > fi
      > done
      posix
      This is a file with POSIX in it - treat it well
      $
      
      1. 當輸入 shell 命令後,shell 命令提示符號 $ 就變成 >
      2. 可以不斷輸入直到結尾,再讓 shell 立刻執行這個 script。
      3. 迴圈變數可以使用 i ,但 file 是比較有意義的變數名稱。
      4. 萬用字元 "*" ,用來代表任何吻合的字串。
      5. grep -l POSIX:表示若檔案中包含字串 POSIX 則顯示檔名,而不顯示內容。
      6. 最後兩行為執行的結果。
    2. 將命令存成程式檔案。使用文字編輯器產生一個 script,檔名 sh02.sh:
      #!/bin/sh
      # first
      # This file looks through all the files in the current
      # directory for the string POSIX, and then prints the names of
      # those files to the standard output.
      for file in *
      do
        if grep -q POSIX $file
        then
           echo $file
        fi
      done
      exit 0
      
    1. 可以使用 .sh 或隨意加上延伸檔名,shell 不會在乎。
    2. 可以利用 file 命令來判斷是否為 script,例如 file sh02.sh 或 file /bin/bash。
      [csie@localhost csie]$ file sh02.sh
      sh02.sh: Bourne shell script text executable
      [csie@localhost csie]$ file /bin/bash
      /bin/bash: ELF 32-bit LSB executable, Intel 80386, 
      version 1 (SYSV), for GNU/Linux 2.2.5, 
      dynamically linked (uses shared libs), stripped
      
  • 執行 script
    1. 呼叫 shell,將 script 當成參數(parameter):
      $ /bin/sh sh02.sh
      
    2. 輸入 script 名稱直接執行
      $ chmod +x sh02.sh
      $ sh02.sh
        bash: sh02.sh: command not found
      $ ./sh02.sh
      

練習題

  1. 請利用第二至四章之 shell 功能,撰寫一 shell script(每一指令或功能皆註明其在講義之頁碼)?
    至少包含註解(姓名、學號、程式功能、日期、版本)、 sed、awk、變數使用、管線處理、正規表示法。
    Sol.
  2. shell script 中,讀到什麼符號,就開始執行該行命令?
    Sol. [Enter] 符號
  3. shell script 中,一行的內容太多,要如何延伸至下一行?
    Sol. 使用 \[Enter]
  4. shell script 中,如何加入註解?
    Sol. # 後面的字,全部被視為註解
  5. 如何執行 shell script 檔案 shell.sh ?
    Sol. 1. 將 shell.sh 加上可讀與執行 (rx) 的權限,就能夠以 ./shell.sh 執行; 2. 直接以 sh shell.sh 方式執行。
  6. shell script 中,第一行出現 #!/bin/bash ,代表意義為何?
    Sol. 宣告使用 /bin/bash 執行這個 script
  7. shell script 中,最後出現 exit 0 ,代表意義為何?
    Sol. 離開 script ,並且回傳 0 給系統
  8. 撰寫 shell script 有那兩種方式?
    Sol. 1.輸入一連串的命令後立即執行;2.將命令存在一個檔案中,隨後當成一個程式來執行。



2017-06-14