我一直在尝试执行以下无法正常运行的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函数调用方法
答案 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
# …