Bash:if [“echo test”==“test”];然后回声“回声测试输出测试shell”fi;可能?

时间:2011-12-11 09:57:50

标签: bash

是否可以使用bash从shell执行命令,如果它返回某个值(或空值),执行一个命令?

if [ "echo test" == "test"]; then
  echo "echo test outputs test on shell"
fi

4 个答案:

答案 0 :(得分:6)

是的,您可以使用反引号或$()语法:

if [ $(echo test) = "test" ] ; then
  echo "Got it"
fi

您应该将$(echo test)替换为

"`echo test`"

"$(echo test)"

如果您运行的命令的输出可以为空。

POSIX“stings相等”test运算符为=

答案 1 :(得分:4)

这样的事情?

#!/bin/bash

EXPECTED="hello world"
OUTPUT=$(echo "hello world!!!!")
OK="$?"  # return value of prev command (echo 'hellow world!!!!')

if [ "$OK" -eq 0 ];then
    if [ "$OUTPUT" = "$EXPECTED" ];then
        echo "success!"
    else
        echo "output was: $OUTPUT, not $EXPECTED"
    fi
else
    echo "return value $OK (not ok)"
fi

答案 2 :(得分:1)

您可以查看上一个程序的exit_code,如:

someprogram
id [[ $? -eq 0 ]] ; then
     someotherprogram
fi

注意,通常0退出代码表示成功完成。

你可以做得更短:

someprogram && someotherprogram

如果someotherprogram成功完成,则只执行上述someprogram。或者,如果您想测试不成功的退出:

someprogram || someotherprogram

HTH

答案 3 :(得分:1)

在$(和)或反引号(`)之间放置命令会将该表达式替换为命令的返回值。所以基本上:

if [ `echo test` == "test"]; then
    echo "echo test outputs test on shell"
fi

if [ $(echo test) == "test"]; then
    echo "echo test outputs test on shell"
fi

会做到这一点。