如果[$? -ne 0]然后语法错误然后意外

时间:2010-08-31 11:11:41

标签: unix function if-statement return-value ksh

我一直在尝试执行以下无法正常运行的UNIX shell脚本。 我是由KornShell(ksh)运行的。

echo $?;
if [ $? -ne 0 ]
then
 failed $LINENO-2 $5 $6
fi
failed()
{
        echo "$0 failed at line number $1";
 echo "moving $2 to failed folder"
}

这是一个错误说Syntax error:then unexpected.。基本上我必须检查最后执行的ksh脚本的最高/最后一个语句的返回码,如果它不等于零,我必须用给定的参数调用函数失败。我之前尝试过分号,但这也没用。

你能帮忙吗?

编辑1:根据输入我更改了代码。仍然存在同样的问题。

ksh ../prescript/Pre_process $1 $2 $3
rc=$?;
if [[ $rc -ne 0 ]];then
    echo "failed";
       exit 1;

EDIT2: 它通过使用双方括号在当时的部分工作。我觉得我使用bash脚本的代码为ksh。我在失败的函数调用中遇到问题。请让我知道适用于此示例的ksh函数调用方法

3 个答案:

答案 0 :(得分:6)

这看起来像bash而不是ksh

failed() {  
  echo "$0 failed at line number $1";  
  echo "moving $2 to failed folder"  
}

if [[ $? -ne 0 ]]
then
  failed $LINENO-2 $5 $6  
fi

答案 1 :(得分:5)

你需要小心。 $?上的第一个操作通常会清除它,以便您的if无论如何都无法正常工作。

你最好使用:

rc=$?
echo $rc
if [ $rc -ne 0 ]
:

除此之外,它适用于我:

$ grep 1 /dev/null

$ if [ $? -ne 0 ]
> then
> echo xx
> fi
xx

$ grep 1 /dev/null

$ echo $?;
1

$ if [ $? -ne 0 ]
> then
> echo yy
> fi
$ _

注意最后一个输出不足。那是因为echo已经吸引了返回值并覆盖了它(因为echo 成功了)。

  

顺便说一下,您应该告诉我们您正在使用哪个UNIX和哪个ksh。我的工作版本是Ubuntu下的ksh93。如果您使用较小的版本,您的里程可能会有所不同。


看起来,从您的更新来看,您现在唯一的问题是函数调用。这很可能是因为你在使用它之后定义它。脚本:

grep 1 /dev/null
rc=$?
if [ $rc -ne 0 ]
then
        failed $rc
fi

failed()
{
        echo Return code was $1
}

产生

qq.ksh[6]: failed: not found

,同时:

failed()
{
        echo Return code was $1
}

grep 1 /dev/null
rc=$?
if [ $rc -ne 0 ]
then
        failed $rc
fi

产生

Return code was 1

答案 2 :(得分:0)

你在行的末尾缺少分号:

if [ $? -ne 0]; then
   # …