next up previous contents
Next: gcc 編譯 Up: 迴圈 Previous: function 功能   Contents

實機練習題

  1. 共同要求:
    1. 在家目錄下建立 zzz 目錄。
    2. 切換工作目錄到 zzz,所有練習腳本皆存在此目錄。
    3. 腳本必須宣告執行命令 /bin/bash,且可執行。
  2. 寫一腳本 loop1.sh 使用 for 迴圈,要求如下:
    1. 使用腳本執行的預設第一、二個參數 $1, $2 讀入兩個數字字串。
    2. 判斷字串中的每個數字,若是兩個字串在同一個位置的數字都相同,則記載一個 A。
    3. 若是兩個字串都有這個數字但是位置不同,則記載一個 B。
    4. 當沒有 A 也沒有 B 時則輸出 0A0B。
    5. 輸入範例: 14685 47653,輸出結果: 14685 47653 Ans=1A2B
  3. 寫一腳本 loop2.sh 使用 while 迴圈,要求如下:
    1. 有一運算式,其運算規則為(運算子,運算元,運算元)。例如(*,3,5) 表示 3*5,結果等於 15。
    2. 運算子可為 +,-,*,/ ,運算元則是一個正或負整數,若有多重括弧,則以內部括弧先處理,每個括弧運算皆取整數。
    3. 使用腳本執行的預設第一個參數 $1 讀入一個運算式,
      例如:"(+,(*,3,5),(-,(*,2,4),6))"
      範例輸出: Ans=17
    4. 範例輸入:"(+,(-,(+,14,19),(*,-7,9)),(/,4,(/,14,12)))"
      範例輸出 Ans=100
    5. 範例輸入 "(/,0,(/,(+,-1,(*,7,(*,-7,18))),(/,-3,10)))"
      範例輸出 No solution
  4. 寫一腳本 loop3.sh 使用 until 迴圈,要求如下:
    1. 對於一個字串若起始字元為 A,最後字元為 L,且其間不含任何 A 或 L 字元則稱 AL 字串,AL 不分大小寫。
    2. 例:A_PENCILA_XXBBHCL_ 表示空白字元)
    3. 使用腳本執行的預設第一個參數 $1 讀入一長字串。
    4. 消去所有可能的 AL 字串,使得消去後之輸出不包含 AL 字串。
    5. 範例輸入:This is a ball, not a bell.
      範例輸出:
      This is , not l.
  5. 寫一腳本 loop4.sh,要求如下:
    1. 使用腳本執行的預設第一個參數 $1 讀入一個目錄字串 dirname。
    2. 如果 dirname 不是目錄,輸出「NO dirname directory」到 stderr、退出、回傳值 1。
    3. 建立一個 function txtrename,將預設變數 $1 檔名 *.txt 改名為 *.bak,例如:$1 是 abc.txt,則被改名為 abc.bak。
    4. 使用 for 迴圈讀取目錄 dirname 中所有的 .txt 檔,逐一呼叫 txtrename 函數改名為 .bak。


2019-06-17