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

bik*_*ben 2 linux bash shell grep if-statement

使用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 
Run Code Online (Sandbox Code Playgroud)

我可以使用上面显示的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 
Run Code Online (Sandbox Code Playgroud)

Jon*_*ler 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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

或者您可以使用两个单独的命令捕获来执行此操作:

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
Run Code Online (Sandbox Code Playgroud)

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

app1="$(someapp -flag | grep usefulstuff | cut -c  5-10)"
Run Code Online (Sandbox Code Playgroud)

不会造成伤害; 它并不是绝对必要的bash(但对于古老的Bourne shell来说可能是必要的).