問題:
需要在成功執行某個命令之後執行一個命令。比如,你需要進入某個目錄,刪除其中所有的文件,但是如果cd命令失敗,你就不去執行刪除的動作(比如權限不允許,或者你把目錄的名字輸入錯誤)
解決方案:
可以使用cd命令的返回值($?)並結合if語句進行判斷。
cd mytmp
if (( $? )); then rm * ; fi
討論:
很明顯,直接輸入命令的時候,是不需要進行這個判斷的。cd的所有錯誤信息都一目瞭然的時候,你肯定不會去執行rm操作。但是腳本就是另外一回事情了,如果你不期望刪除你工作目錄的文件,那麼檢測就是必須的了。
比如你在某個沒有mytmp的目錄執行了腳本,cd命令會失敗,有了這個判斷,當前的目錄會保持原樣。如果沒有這個if判斷,腳本會直接執行下面的語句,rm *會刪除當前目錄所有的文件。
那麼$?是如何得到的呢?它是命令的返回值,對c程序員來說,這個值也就是賦給exit函數的參數,比如exit(4)會返回4.對於腳本來說,0認爲是成功,非零認爲是失敗。
在編寫腳本的時候,你會期望你的腳本返回正確的值,從而,$?會正確的設置,如果你不這麼做,這個值會保留最後一個命令的返回值,這應該不是你期望的。