2013-03-21 72 views
1

我寫了一個簡單的k shell程序,但是我看到以下錯誤 「0403-057語法錯誤在第11行:`then'不是預期的。然後在k shell腳本上沒有預期的錯誤

的代碼是

#!/usr/bin/ksh 
    function check_rm 
    { 
    number=$# #assign number of parameters 
if [[ $1 -gt 0 ]]; #if RC is success 
    then 


     if[[ "$number" -gt 2 ]]; 
     then   

     /usr/bin/mv $4 $3 
     echo " ERROR for $2 " 
    fi 


    #user_name=`whoami` 
    #mail_body="$3 checked in by $user_name" 
    #echo $mail_body 

else 


     if[[ "$number" -gt 2 ]]; 
      then 

      /usr/bin/rm -rf $4 
     fi  
     echo "GOOD for $2 " 
     echo "3f was successful" 
fi     

}

有人可以幫助嗎?

+3

'if if [['=>'if [['' – Wrikken 2013-03-21 07:28:54

回答

0

您可能會刪除「;」在你的條件之後。 A如果條件有着非常嚴格的語法,我糾正你的代碼:

 #!/usr/bin/ksh 

    function check_rm 
    { 
     #assign number of parameters 
     number=$#  
     #if RC is success 
     if [[ $1 -gt 0 ]] 
     then 
      if [[ ${number} -gt 2 ]] 
      then   
       /usr/bin/mv $4 $3 
       echo " ERROR for $2 " 
      fi 


      #user_name=`whoami` 
      #mail_body="$3 checked in by $user_name" 
      #echo $mail_body 

     else 
      if [[ ${number} -gt 2 ]] 
      then 
       /usr/bin/rm -rf $4 
      fi  
      echo "GOOD for $2 " 
      echo "3f was successful" 
     fi     

    } 
+0

-1:if條件好之後的分號;自己嘗試一下。您的更改會使代碼在其他地方變得更糟,例如使用'[[]]'而不是'[[...]]'。 – 2013-03-21 13:41:54

+0

「應該」是一個錯誤,我會寫「可能」...順便說一句「如果[...]」是首選的「人測試」,所以我不能得到它如何我的建議得到的代碼最糟糕......所以有建設性的論點......非常感謝! – 2013-03-21 14:35:55

+0

''''是'test'的別名,它通常是Unix系統中的獨立可執行文件,這就是爲什麼'man test'會推薦它的原因。 ''[[...]]'由shell本身解釋,這意味着它更快(不必調用外部可執行文件)並且語法更簡單。查看shell自己的手冊頁('man bash','man ksh','man zsh',...) – 2013-03-21 15:59:00

3

由於Wrikken在評論中指出的,問題是在if[[之間的線路缺少空間; ksh需要這個來告訴兩者是分開的。腳本稍後會出現相同的問題;你需要修復這兩個事件。