【问题标题】:then not expected error on k shell script那么 k shell 脚本上不会出现预期错误
【发布时间】:2013-03-21 07:25:52
【问题描述】:

我写了一个简单的 k shell 程序,但我看到以下错误 " 0403-057 第 11 行的语法错误:不需要 `then'。"

代码是

 #!/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                  

}

有人可以帮忙吗?

【问题讨论】:

    标签: shell unix ksh


    【解决方案1】:

    正如 Wrikken 在 cmets 中指出的那样,问题在于 if[[ 之间的那条线上缺少空格; ksh 需要这个来告诉两者是分开的。脚本后面也有同样的问题;您需要修复这两种情况。

    【讨论】:

      【解决方案2】:

      您可以删除“;”在你的 if 条件之后。 if 条件的语法非常严格,我更正了您的代码:

           #!/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                  
      
          }
      

      【讨论】:

      • -1:if条件后面的分号就可以了;自己试试。您的更改使代码在其他地方变得更糟,例如使用[ … ] 而不是[[ … ]]
      • "should" 是一个错误,我会写"might"...顺便说一句,"if [ ... ]" 是 "man test" 的首选,所以我不明白我的建议是如何得到的代码最糟糕......如此建设性的论点......非常感谢!
      • [test 的别名,它通常是 Unix 系统中的独立可执行文件,这就是 man test 推荐它的原因。 [[ … ]] 由 shell 本身解释,这意味着它更快(不必调用外部可执行文件)并且语法不那么脆弱。查看 shell 本身的手册页(man bashman kshman zsh,...)
      • 感谢您的建议。我自己看了,我发现你是对的here
      猜你喜欢
      • 2010-09-26
      • 2016-04-04
      • 1970-01-01
      • 2018-05-28
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      相关资源
      最近更新 更多