Shell Unix KSH:任何错误只返回1,成功只返回0

Shell 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

我有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 ] 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}”组合使用