簡體   English   中英

Bash shell'if'語句比較不同命令的輸出

[英]Bash shell 'if' statement comparing outputs from different commands

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM