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