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

使用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 

至少在其他炮弹中,你需要对空间更加小心; 方括号是一个命令名称,需要与前面和后面的单词分开。 您还需要(在某些经典的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来说可能是必须的)。

您需要通过预先添加$来引用表达式的值:

 ... if [ "$app1" = "$(someapptwo -flag | grep usefulstuff | cut -c 20-25)" ]; then ...