Shell-Script

沒有參數的腳本應該回顯一條消息,但它沒有

  • August 24, 2015

我質疑為什麼我的腳本在沒有提供參數時仍然不執行條件。我認為這可能是我的 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" ]

引用自:https://unix.stackexchange.com/questions/225015