Shell Unix KSH:任何错误只返回1,成功只返回0
我有unix shell脚本,其中我给出了错误和非错误的两个条件,如下所示: 脚本:Test.shShell Unix KSH:任何错误只返回1,成功只返回0,shell,unix,ksh,Shell,Unix,Ksh,我有unix shell脚本,其中我给出了错误和非错误的两个条件,如下所示: 脚本:Test.sh #!/bin/sh error1=ERROR error2=FAIL CheckError1=`grep $error1 proshell.sh | wc -l` CheckErro2=`grep $error2 proshell.sh | wc -l` if [ $CheckError1 -ge 1 ] then exit 1 elif [ $CheckError2 -ge 1
#!/bin/sh
error1=ERROR
error2=FAIL
CheckError1=`grep $error1 proshell.sh | wc -l`
CheckErro2=`grep $error2 proshell.sh | wc -l`
if [ $CheckError1 -ge 1 ] then
exit 1
elif [ $CheckError2 -ge 1 ] then
exit 1
else
exit 0
fi
注意:问题是,对于退出1的任何错误,我不会总是得到1
如何对任何错误只获取1?您正在检查匹配的行数而不是grep的退出状态 您要执行以下操作:
error1=ERROR
error2=FAIL
file-proshell.sh
if grep -q "$error1" "$file" || grep -q "$error2" "$file"; then
exit 1
else
exit 0
fi
grep-q
抑制输出,但如果找到匹配项,则以成功退出状态退出请显示真实代码;您所显示的语法不正确。您还有一个输入错误:CheckErro2=
vs$CheckError2-ge
。你得到的是什么而不是1?你得到0了吗?或者[
是在抱怨一个格式错误的条件吗?但是代码没有运行,所以…猜测是徒劳的。另请参阅哪些引用了Bash,但对Korn shell(和Bourne shell)同样有效。此外,您还谈到了ksh
,但您的shebang行指定了/bin/sh
,这很可能不是ksh
。请将这两个测试与grep-E“${error1}|${error2}”组合使用