开发者

if [ $? -ne 0 ] then syntax error then unexpected

I have been trying to execute the following UNIX shell script which is not working. I am running it by KornShell (ksh).

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

This is giving an error saying Syntax error:then unexpected.. Basically I have to check for the last executed ksh script's highest/last statement's return code and if it is not equal to zero I have to call function failed with the given parameters. I tried putting semicolon before then but that also did not work.

Can you please help?

Edit1: Based on the inputs I changed code. Still the same problem exists.

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

Edit2: It is working for the then part by using double squared brackets. I feel I used code of bash script for ksh. I am facing problem in function call of failed. Please let me know appropriate way of function call in ksh for this example


This looks like bash rather than 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


You need to be careful. The first operation on $? will usually clear it so that your if won't work anyway.

You would be better off using:

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

Other than that, it works fine for me:

$ 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
$ _

Note the lack of output in the last one. That's because the echo has sucked up the return value and overwritten it (since the echo was successful).

As an aside, you should let us know which UNIX and which ksh you're actually using. My working version is ksh93 under Ubuntu. Your mileage may vary if you're using a lesser version.


It looks like, from your update, your only problem now is the function call. That's most likely because you're defining it after using it. The script:

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

failed()
{
        echo Return code was $1
}

produces:

qq.ksh[6]: failed: not found

while:

failed()
{
        echo Return code was $1
}

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

produces

Return code was 1


you are missing semicolons at the end of the lines:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜