※ 引述《CMrockmanx (rockman)》之銘言:
: 嗯,經過了講解後!已經瞭解了%90!!還剩下一些小問題!再麻煩你囉!!
: : function f {
: : if [ $# -gt 2 ]; then
: : echo "You give me too many arguments!"
: : return 1 (return 1 是什麼啊?
: : elif [ $# -eq 0 ]; then
: : echo "You give me no arguments!"
: : return 1
: : elif [ $# -eq 1 ]; then
: : search_dir=/
: : else
: : if [ -d $2 ]; then (-d 是什麼啊?
: : search_dir=$2
: : else
: : search_dir=/
: : fi (fi 是什麼啊?
: : fi (為什麼要兩個呢???
: : find "$search_dir" -name "$1" 2>/dev/null
: : return 0
: : }
那我一個個慢慢答。
在 Unix 下,每個程式執行完了以後,都可以傳回一個
值,給執行它的人。在 DOS 也有這麼一套機制,如果
你有寫過批次檔的 ERRORLEVEL 的話。好,不岔題。
為什麼要傳回一個值呢?通常就是用來表示說,這個程
式執行的狀況怎樣。一般說來,假設程式執行得很順暢
沒什麼事情發生,應該會傳回 "0" ,如果有某些錯誤
的話,就會傳回 1, 2, ... 。
當你在執行 shell 中的 function 時,其實跟執行一
個程式是很類似的,所以遇到一些錯誤,我們還是傳
回一個非零的值吧,這裡,我選擇了 1 這個值。
我們來看這一行:
if [ -d $2 ]
這是用來判斷說, $2 裡面的值,到底是不是目錄。
如果 $2 根本就不存在,或是 $2 只是檔案,這個條
件判斷,就會是 false 。
要注意那個像是 -d -lt -eq 之類的東西,是要放在
[ ] 裡面,才有意義。
再來,其實應該要講 if 的格式,通常是像:
if [ 某某條件 ]; then
blahblah...
else
blahblah...
fi
也有這樣的:
if [ 條件 ]; then
blahblah...
elif [ 條件 ]; then
blahblah...
else
blahblah...
fi
當然如果 else 那邊不用做什麼事,就可以把 else
那塊全部省略掉。
最後再來看為什麼要用 fi 吧,其實它的意義就好像是
ENDIF 一樣,而且很有趣的,用的剛好是 if 倒過來寫成
的 fi 。類似的情況還有一個,就是 case 倒過來變成
esac 。
最後的問題,為什麼有兩個 fi ,我們可以用下面的圖
表來看:
if 引數多於兩個 then
你給太多了啦
elif 引數等於零個 then
你怎麼一個都不給呢?
elif 引數只有一個 then
.....
else
if 第二個引數是存在的目錄 then
....
else
....
fi
fi
看完之後,我也覺得好像改成一個 fi 也可以耶。
也就是後面的 else if 改成 elif ,
然後把 fi 拿掉就可以了,這樣就只剩
下一個 fi 。
--
※ 發信站: 批踢踢實業坊(ptt.m8.ntu.edu.tw)
◆ From: cave1.ck.tp.edu