Enj*_*ing 8 unix ksh if-statement function return-value
我一直在尝试执行以下无法正常运行的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"
}
Run Code Online (Sandbox Code Playgroud)
这是错误的说法Syntax error:then unexpected..基本上我必须检查最后执行的ksh脚本的最高/最后一个语句的返回码,如果它不等于零,我必须用给定的参数调用函数失败.我之前尝试过分号,但这也没用.
你能帮忙吗?
Edit1:根据输入改变了代码.仍然存在同样的问题.
ksh ../prescript/Pre_process $1 $2 $3
rc=$?;
if [[ $rc -ne 0 ]];then
echo "failed";
exit 1;
Run Code Online (Sandbox Code Playgroud)
Edit2: 它通过使用双方括号在当时的部分工作.我觉得我使用bash脚本的代码为ksh.我在失败的函数调用中遇到问题.在这个例子中,请让我知道ksh中函数调用的适当方式
这看起来像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
Run Code Online (Sandbox Code Playgroud)
你需要小心.第一次操作$?通常会将其清除,以便您if无论如何都不会工作.
你最好使用:
rc=$?
echo $rc
if [ $rc -ne 0 ]
:
Run Code Online (Sandbox Code Playgroud)
除此之外,它对我来说很好:
$ 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
$ _
Run Code Online (Sandbox Code Playgroud)
注意最后一个输出缺乏.这是因为echo已经带走了返回值和覆盖它(因为回声是成功的).
顺便说一句,你应该让我们知道你正在使用哪个UNIX和哪个ksh.我的工作版本是Ubuntu下的ksh93.如果您使用较小的版本,您的里程可能会有所不同.
看起来,从您的更新,您现在唯一的问题是函数调用.这很可能是因为你在使用它之后定义它.剧本:
grep 1 /dev/null
rc=$?
if [ $rc -ne 0 ]
then
failed $rc
fi
failed()
{
echo Return code was $1
}
Run Code Online (Sandbox Code Playgroud)
生产:
qq.ksh[6]: failed: not found
Run Code Online (Sandbox Code Playgroud)
而:
failed()
{
echo Return code was $1
}
grep 1 /dev/null
rc=$?
if [ $rc -ne 0 ]
then
failed $rc
fi
Run Code Online (Sandbox Code Playgroud)
产生
Return code was 1
Run Code Online (Sandbox Code Playgroud)