精華區beta NTUWindBand 關於我們 聯絡資訊
※ 引述《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