2013-12-16 46 views
8

我正在編寫的腳本的一部分需要檢查相同字符串的各種文本文件。在我只需要檢查一個文件之前,我需要在cateogies中有很長的字符串列表來查找哪些被定義爲變量。後來在腳本中的variabled被稱爲輸出到屏幕上,如果有一個匹配:是否可以在'if'語句中管多個命令?

category_1=$(sudo zcat myfile | egrep -c 'Event 1|Event 2|Event 3') 

category_2=$(sudo zcat myfile | egrep -c 'Event 4|Event 5|Event 6') 

category_3=$(sudo zcat myfile | egrep -c 'Event 7|Event 8|Event 9') 

... 

echo Category 1 

if [[ $category_1 -ge 2 ]];then 

      echo There were $category_1 events 

elif [[ $category_1 -eq 1 ]]; then 

      echo There was $category_1 event 

fi 

等等,等等......

現在我需要去改變它,這樣我可以檢查grepped對多個文本文件的字符串。我試着與grep的變量if語句來定義新的文件作爲變量,管他們無濟於事:

category_1=$(egrep -c 'Event 1|Event 2|Event 3') 

category_2=$(egrep -c 'Event 4|Event 5|Event 6') 

category_3=$(egrep -c 'Event 7|Event 8|Event 9') 


myfile=$(sudo zcat myfile) 

myfile2=$(sudo zcat myfile2) 

myfile3=$(sudo zcat myfile3) 

... 

echo Category 1 - Myfile 



if [[ myfile | $category_1 -ge 2 ]];then 

      echo There were $category_1 events in myfile 

elif [[ myfile | $category_1 -eq 1 ]]; then 

      echo There was $category_1 event in myfile 

fi 

看來,我可以在一個if語句不是管的命令。

回答

11

使用$(...)捕捉命令的輸出到一個字符串:

if [[ $(sudo zcat myfile1 | egrep -c 'Event 1|Event 2|Event 3') -ge 2 ]] ; then 
+0

是否有可能將'egrep'命令設置爲一個變量,以便我不必在每個命令中放置'Event 1'等等。所以它更像 grepvariable1 = $ egrep -c'Event 1 | Event 2 | Event 3'if [[$(sudo zcat myfile1 | grepvariable1)-ge 2]];然後 – Hxwk

+0

@Hxwk:你可以定義一個包含你想要重複的代碼的函數。 – choroba

+0

感謝您指引我朝着正確的方向發展,我會研究功能 – Hxwk

0

可以在if使用管道,但你混了兩兩件事。 您使用$category_1與管道;而$category_1不是命令。 您可以使用命令替換而不是變量。

if [[ `sudo zcat myfile | egrep -c 'Event 1|Event 2|Event 3')` -ge 2 ]];then 

等等。

你也可以使用變量而不是命令,但它會有點奇怪。

0

你也可以使用一個命令,例如:如果[「$房子」 =「好好先生」] || [「$房子」 =「壞」]然後......做的工作

+2

如果您解釋了它的工作原理和功能,請閱讀幫助頁面,瞭解格式化答案。 – AdrianHHH

相關問題