如何在linux shell中获取命令返回状态

时间:2014-11-25 02:15:12

标签: linux shell

说,我在我的shell中调用grep "blabla" $file。我怎么知道grep是否发现" blabla"在$ file?

我尝试ret='grep "blabla" $file',这会通过查看ret的值来实现吗?如果是,是ret整数值还是字符串值还是其他什么?

2 个答案:

答案 0 :(得分:4)

如果你做的话

ret='grep "blabla" $file'

然后ret将包含字符串“grep”blabla“$ file”。

如果你这样做(你的意思)

ret=`grep "blabla" $file`

然后ret将包含任何输出grep吐出($file中与“blabla”匹配的行。)

如果您只是想知道grep是否在$file中找到了与“blabla”相匹配的任何行,那么您需要检查grep -q blabla "$file"的返回代码(请注意,您不会需要引用文字字符串,当它们不包含特殊字符并且应该引用变量引用时)。

变量$?包含最近执行的命令的返回码。所以

grep -q blabla "$file"
echo "grep returned: $?"

将回显grep的返回码,如果输出任何行,则返回0

最简单的方法是测试并执行某些操作但是,根本不要使用$?,而是将grep调用嵌入if这样的语句中

if grep -q blabla "$file"; then
    echo grep found something
else
    echo grep found nothing
fi

答案 1 :(得分:2)

运行命令时

grep blabla "$file"

状态保存在变量$?中。 0表示好,大于0表示不好。那么你 可以吗

grep -q blabla "$file"
if [ $? = 0 ]
then
  echo found
fi

或保存到变量

grep -q blabla "$file"
ret=$?
if [ $ret = 0 ]
then
  echo found
fi

或者直接将ifgrep一起使用

if grep -q blabla "$file"
then
  echo found
fi