※ 引述《CMrockmanx (rockman)》之銘言:
: : function f {
: : if [ $# -gt 2 ]; then
: : echo "You give me too many arguments!"
: : 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
: : search_dir=$2
: : else
: : search_dir=/
: : fi
: : fi
: : find "$search_dir" -name "$1" 2>/dev/null
: : return 0
: : }
: 嗯,實在是太深了!看來我還要再好好加油了!
: 當答案也看不懂時,表示知識的層次還不夠高!!唉!!
看不懂的時候就要先試著跑跑看嘛。
不過在這裡我們要加點背景知識:
$# 指的就是我們給的 argument 的數量
例如:
$ f mail /abcd -> $# = 2
$ f news -> $# = 1
$ f -> $# = 0
$ f a b c d e f g -> $# = 7
這樣沒問題吧。
還有每個 argument 都有一個編號,在第一個例子裡面:
mail 可以用 $1 表示
/abcd 可以用 $2 表示
我們再回過頭來看我那個 function 是在做什麼。
因為我們所要寫的 "f" 可以接受一個或兩個 arguemnt ,
所以我就把超過兩個,或是完全沒給 argument 的
( $# > 2 or $# = 0 )
那些狀況給找出來,印個錯誤訊息,然後就結束。
如果 $# = 1 的話,我就知道要從 "/" 開始找起,
如果 $# = 2 的話,我還要看給的目錄名字, $2 ,
是不是真的存在,假如存在的話就拿來用,不存在
的話,就改用 "/" ,最後,再把一些目錄、檔名
這些交給 find 去執行,整個程式做的就是這樣。
另外那些 if, elif, else, fi 和什麼 -gt -eq 的
事,大概就沒什麼重要了。只是一些條件判斷,看
看是不是 greater than 或 equal 罷了。
--
※ 發信站: 批踢踢實業坊(ptt.m8.ntu.edu.tw)
◆ From: cave5.ck.tp.edu