Shell-Script
沒有參數的腳本應該回顯一條消息,但它沒有
我質疑為什麼我的腳本在沒有提供參數時仍然不執行條件。我認為這可能是我的 if 語句的順序,但我不確定。有什麼建議嗎?這似乎不是一個簡單的錯誤,比如錯位的空格。
for param in "$@"; do if [[ -n $confirm ]]; #this is a getopts switch asking for confirmation like rm -i then #asks user whether to confirm deletion if [ $answer != [Yy]* ]]; then continue #go to next param argument fi fi if [ -z "$param" ] #if no argument has been specied, then #print an error that additional operand is needed. elif [ -d ./$param ] #if a directory name is specified then if [[ -n $recursive]] #getops recursive switch, like rm -r then #recursively delete a directory fi #error message about deleting directory without -r switch elif [ ! -e ./$param ] then #If not an existing file either then print error that there is no such file or directory elif [[ $param = "safe_rm" ]] || [[ $param = "safe_rm_res" ]] then #This prevents script from trying to delete itself or restore script fi if [[ -n $verbose ]] third and final getopts switch, similar to rm -v then #message confirming deletion fi done
我的程式碼是關於製作一個資源回收筒的,它基於
rm
腳本也有的命令,並且使用與rm -i -v
和相同的方式使用開關-r
。上面的 if 語句根據參數改變了我處理刪除的方式。第一個 if 語句是關於參數是否是目錄。二是是否為文件,三是是否為空,四是參數是否為自身(刪除自身)
for
用於迭代參數的循環終止並在done
滿足其條件時(列表的末尾)轉到其語句。當腳本到達for
沒有參數的循環時,列表的開頭與結尾相同,並且循環的條件為假。在原始範例中,如果給定一個空字元串,循環內部的命令會產生不正確的結果。如果變數“param”為空,則第一種情況
[ -d ./$param ]
將與之前的目前目錄匹配,./
並且腳本會檢查空字元串[ -z "$param" ]
。