2013-12-16 2 views
8

Часть скрипта, который я пишу, должна проверять различные текстовые файлы для одних и тех же строк. Прежде чем я просто должен был проверить один файл, чтобы у меня был длинный список строк в категиях для поиска, которые определены как переменные. Позже в скрипте 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 но безрезультатно:

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 

кажется, что я не могу команды трубы в, если заявление.

ответ

11

Использование $(...) для захвата вывода команды в строку:

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

Можно чтобы команда «egrep» была установлена ​​как переменная, так что мне не нужно ставить «Событие 1» и т. д. в каждой команде? Так что это было бы больше похоже на grepvariable1 = $ egrep -c 'Событие 1 | Событие 2 | Событие 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

Это было бы намного полезнее, если бы вы объяснили, как это работает и что он делает, а также прочитайте страницы [help] о форматировании ответов. – AdrianHHH

Смежные вопросы