呼呼~終於把script念完了~~
真慘 13節的功課都出來了
12才剛寫 ><

麻煩老師了
* 思考練習
1) 若執行如下命令:
unset var
[ $var = xyz ]
會看到甚麼結果:
-bash:[:=:unary operator expected]
請文如何解決之(最好能說明原理)?
方法一: [ "$var" = xyz ] (避免發生空字串的情況)
方法二: [ a$var = axyz ](避免發生空字串的情況)
但這兩種方法也都會傳false的值
因為預設即是-n(字串是否相同),因此都是false
2) 請用 return value 及 file descriptor 的概念來說明如下命令式:
cmd1 && cmd2 (cmd1的值為ture時,執行cmd2)
cmd1 || cmd2 (cmd1的值為false時,執行cmd2)
cmd1 && cmd2 || cmd3
1)cmd1的值為ture時,執行cmd2, cmd2若為flase則執行cmd3
2)cmd1的值為flase時,則直接跑cmd3
cmd1; cmd2; cmd3 (cmd1跑完,執行cmd2,cmd2完執行cmd3)
cmd1 | cmd2 | cmd3
(pipe,cmd1跑完的結果送到cmd2,cmd2跑完的結果再送到cmd3)
3) 如下是 if 判斷式之格式內容:
if command
then
command
[command...]
fi
請你寫出 if-elif-else 的格式內容:
格式:
if command;then
command
elif command;then
command
else
command
fi
並請理解所謂的"多重條件判斷"的先後順序。
4) 請寫一個 if-elif-else 判斷式,其內容如下:
1) 先判斷 script 是否有參數
2) 若沒有,提示執行者輸入路逕,並定義為 file 變數
3) 若 script 有參數,將 file 變數設為 $1 的值
4) 判斷 file 變數是否目錄,然則,顯示 "dir"
5) 再判斷 file 是否常規檔,然則,顯示 "file"
6) 最後判斷 file 是否存在,然則不作任何動作. 否則,顯示 "not found"
if [ ! "$1" ];then
echo "Enter your path :"
read file
else
file=$1
fi
if [ -d "$file" ];then
echo dir
elif [ -f "$file" ];then
echo "file"
elif ["$file"];then
echo
else
echo "not found"
fi
5) 請你寫出 case 的格式內容:
格式:
read var
case "$var" in
v1)
command ;;
v2)
command ;;
v3)
command ;;
esac
若我要你將上述 case 格式換成 if-elif-else 格式呢?
格式:
read var
if [ $var = v1];then
command
elif [$var = v2];then
command
else
command
fi
6) 請寫一個 case 判斷式,其內容如下:
1) 提示執行者輸入一種水果名稱,並定義為 fruit 變數
2) 若輸入為 apple或Apple ,則顯示 "color is red"
3) 若輸入為 banana或Banana ,則顯示 "color is yellow"
4) 若輸入為 barlar或Barlar或bala或Bala或barla或Barla或balar或Balar ,則顯示 "color is green"
5) 若是其他,則顯示 "color is unkown"
echo -n "Please enter a fruit :"
read fruit
case "$fruit" in
[Aa]pple)
echo "color is red";;
[Bb]anana)
echo "color is yellow";;
[Bb]alar|[Bb]ala|[Bb]arla|[Bb]alar)
echo "color is green" ;;
*)
echo "color is unkown" ;;
esac
若改用 if-elif-else 來寫呢?
第三個不知道怎麼判斷
echo -n "Please enter a fruit :"
read fruit
if [ "$file" = apple -o "$file" = Apple ];then
echo "color is red"
elif [ "$file" = banana -o "$file" = Banana ];then
echo "color is yellow"
elif [ "$file" = barlar -o "$file" = Barlar ];then
echo "color is green"
elif [ "$file" = bala -o "$file" = Bala ];then
echo "color is green"
elif [ "$file" = barla -o "$file" = Barla ];then
echo "color is green"
elif [ "$file" = balar -o "$file" = Balar ];then
echo "color is green"
*)
echo "color is unknown"
fi
7) 請列出 shell script 常用的三種迴圈(loop)名稱:
1: for
2: while
3: until
並說說 for 迴圈的作用及過程。(提示:以變數值的數量來理解)
說明:
for var in "$@"
do
command
done
其作用是將user打入參數內容,一一列出

請寫一個 for 迴圈顯示如下結果:
value is 1
-------------
value is 2
-------------
value is 3
-------------
value is 4
-------------
value is 5
-------------
(注意:虛線也需要顯示出來。)
for ((i=1 ; i<=5 ; i++))
do
echo "valuse is $i"
echo -------------
done
9) 假設 script 讀進的參數是 x "y z"(有 soft quote),
回圈的內容是:do echo $i; done
請問如下的 for 回圈的結果有何不同?
for i in "$*" :
x y z
for i in "$@" :
x
y z
for i in $@ :
x
y
z
請問, 哪一個等同於 for i 呢? "$@"
10) 請以 return value 的概念來說說 while 跟 until 迴圈的差別:
說明:
當return value的值符合while的command時,繼續跑,不符合就跳出
當return value的值不符合until的command時,繼續跑,符合就跳出
11) 請修改習題 6 的 script ,在 1) 與 2) 之間插入一個 while 迴圈:
1) 判斷 fruit 變數是否為空的(也就是在執行者直接敲 Enter )?
2) 若然,重新提示執行者輸入一種水果名稱,並定義為 fruit 變數
3) 直到 fruit 變數非空為止
while [ -z "$fruit" ];do
echo "enter a fruit :"
read fruit
done
12) 請問啥是 command grouping?
能否舉一個應用例子?
說明:
其格式如下
{
command
[command]
}
or
{ command[;command;command] }
例:
{[ "$1" ]||echo "$1 dont exit."
exit 1
}
13) 請問 function 又叫甚麼名稱?
名稱:函數 (name command group)
請問你能用 function 取代上一題的 command group 嗎?
說明:
bye () {
[ "$1" ]||echo "$1 dont exit."
exit 1
}
14) 能否以 process 的觀念來說一說 shell cript 在 shell 與 command 之間的關係? 並說明與 source 與 exec 的差異.
說明:
還不太懂