Bash shell'if'语句比较不同命令的输出

时间:2011-10-21 14:10:26

标签: linux bash shell if-statement grep

使用我调整过的example given to me by Sam Ruby,我可以展示我想要实现的目标。

app1=$(someapp -flag | grep usefulstuff | cut -c 5-10)
if [$app1 = (someapptwo -flag | grep usefulstuff | cut -c 20-25)]; then
mkdir IPFolder-1
elif ...blah blah
fi 

我可以使用上面显示的grep,还是我咆哮错误的树?或者它应该看起来像这样的东西:

app1=$(someapp -flag | grep usefulstuff | cut -c 5-10)
app2=$(someapptwo -flag | grep usefulstuff | cut -c 20-25)
if [$app1 = $app2]; then
mkdir IPFolder-1
elif ...blah blah
fi 

2 个答案:

答案 0 :(得分:7)

至少在其他炮弹中,你需要对空间更加小心;方括号是命令名称,需要与上一个和后一个单词分开。您还需要(再次在经典shell中)将变量嵌入双引号中:

app1=$(someapp -flag | grep usefulstuff | cut -c 5-10)
if [ "$app1" = "$(someapptwo -flag | grep usefulstuff | cut -c 20-25)" ]
then mkdir IPFolder-1
elif ...blah blah
then : do this instead...
fi

你可以在一行中完成所有操作(好吧,两个因为我尽可能避免使用水平滚动条):

if [ "$(someapp    -flag | grep usefulstuff | cut -c  5-10)" = \
     "$(someapptwo -flag | grep usefulstuff | cut -c 20-25)" ]
then mkdir IPFolder-1
elif ...blah blah
then : do this instead...
fi

或者你可以通过两个单独的命令捕获来完成它:

app1=$(someapp    -flag | grep usefulstuff | cut -c  5-10)
app2=$(someapptwo -flag | grep usefulstuff | cut -c 20-25)
if [ "$app1" = "$app2" ]
then mkdir IPFolder-1
elif ...blah blah
then : do this instead...
fi

更新的 添加了一些额外的报价。也可以引用作业:

app1="$(someapp -flag | grep usefulstuff | cut -c  5-10)"

不会造成伤害;对于bash来说并不是绝对必要的(但是对于过时的Bourne shell来说可能是必要的。)

答案 1 :(得分:3)

您需要通过添加$:

来引用表达式的值
...
if [ "$app1" = "$(someapptwo -flag | grep usefulstuff | cut -c 20-25)" ]; then
...