是否可以在'if'语句中管道多个命令?

Hxw*_*xwk 10 linux bash shell

我正在编写的脚本的一部分需要检查相同字符串的各种文本文件.在我不得不检查一个文件之前,我在cateogies中有一长串字符串来搜索哪些被定义为变量.稍后在脚本中调用variabled并在匹配时输出到屏幕:

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

等等......

现在我需要更改它,以便我可以检查多个文本文件的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
Run Code Online (Sandbox Code Playgroud)

似乎我不能在if语句中管道命令.

cho*_*oba 18

用于$(...)将命令的输出捕获到字符串中:

if  [[ $(sudo zcat myfile1 | egrep -c 'Event 1|Event 2|Event 3') -ge 2 ]] ; then
Run Code Online (Sandbox Code Playgroud)