2013-12-16 28 views
8

Một phần của tập lệnh tôi đang viết cần kiểm tra các tệp văn bản khác nhau cho cùng một chuỗi. Trước khi tôi chỉ phải kiểm tra một tập tin, vì vậy tôi đã có một danh sách dài các chuỗi trong cateogies để tìm kiếm được định nghĩa là biến. Sau đó trong các kịch bản variabled được gọi và xuất ra màn hình nếu có một trận đấu:Có thể nối nhiều lệnh trong câu lệnh 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 

vv, vv ...

Bây giờ tôi cần phải thay đổi nó vì vậy mà tôi có thể kiểm tra grepped chuỗi chống lại nhiều tệp văn bản. Tôi đã cố gắng để xác định các tập tin mới như biến và ống chúng trong câu lệnh if với biến grep để avail không có:

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 

Dường như tôi không thể lệnh đường ống trong một câu lệnh if.

Trả lời

11

Sử dụng $(...) để nắm bắt đầu ra của một lệnh vào một chuỗi:

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

để có lệnh 'egrep' được đặt làm biến để tôi không phải đặt 'Sự kiện 1', v.v ... trong mỗi lệnh? Vì vậy, nó sẽ giống như grepvariable1 = $ egrep -c 'Sự kiện 1 | Sự kiện 2 | Sự kiện 3'if [[$ (sudo zcat myfile1 | grepvariable1) -ge 2]]; sau đó – Hxwk

+0

@Hxwk: Bạn có thể xác định một hàm có chứa mã bạn muốn lặp lại. – choroba

+0

Cảm ơn bạn đã chỉ cho tôi đúng hướng, tôi sẽ xem xét các chức năng – Hxwk

0

Bạn có thể sử dụng ống trong if, nhưng bạn kết hợp hai điều. Bạn sử dụng $category_1 với đường ống; và $category_1 không phải là lệnh. Bạn có thể sử dụng lệnh thay thế thay vì biến.

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

v.v.

Bạn cũng có thể sử dụng các biến thay vì lệnh nhưng sẽ hơi lạ một chút.

0

Thay vào đó, bạn có thể sử dụng lệnh như: nếu ["$ house" = "nice"] || ["$ house" = "bad"] thì ... để thực hiện công việc

+2

Điều này sẽ hữu ích hơn nhiều nếu bạn giải thích cách hoạt động và nó hoạt động, cũng vui lòng đọc các trang trợ giúp về định dạng câu trả lời. – AdrianHHH

Các vấn đề liên quan