2012-09-11 34 views

Trả lời

80
! /usr/local/bin/monit --version | grep -q 5.5 

(grep trả về một lối ra-trạng thái 0 nếu nó tìm thấy một trận đấu, và 1 khác Các tùy chọn -q, "yên tĩnh", nói với nó không in bất kỳ trận đấu mà nó tìm thấy;. Nói cách khác, nó nói . grep rằng điều duy nhất bạn muốn là trở lại giá trị của nó các ! lúc đầu đảo ngược lối ra-tình trạng của toàn bộ đường ống)

Edited thêm:. Ngoài ra, nếu bạn muốn làm điều này trong "tinh khiết Bash "(thay vì gọi số grep), bạn có thể viết:

[[ $(/usr/local/bin/monit --version) != *5.5* ]] 

([[...]] được giải thích trong §3.2.4.2 "Conditional Constructs" of the Bash Reference Manual. *5.5* là giống như trong fileglobs:. Zero hoặc nhiều ký tự, cộng với 5.5, cộng với không hoặc nhiều ký tự)

+0

lưu bacon của tôi! – mhenrixon

+0

Nỗ lực thiên tài! Sức mạnh của đường ống liên tục ấn tượng. –

+0

Có bất kỳ giá trị nào của '/ usr/local/bin/monit --version' khi nó bị lỗi không? –

20
[ $(/usr/local/bin/monit --version) == "5.5" ] 

ví dụ-1: kiểm tra cho sự thành công

[ $(/usr/local/bin/monit --version) == "5.5" ] && echo "OK" 

ví dụ 2: kiểm tra cho sự thất bại

[ $(/usr/local/bin/monit --version) == "5.5" ] || echo "NOT OK" 

hay, chỉ cần kiểm tra xem sản lượng chứa 5.5:

[[ $(/usr/local/bin/monit --version) =~ "5.5" ]] || echo "NOT OK" 
+0

"5.5" sẽ là một phần của số lượng đầu ra lớn hơn. –

+0

đã cập nhật câu trả lời – perreal

+0

@perreal - Bạn không thể trích dẫn regex trong bash, nó làm cho nó trở thành một chuỗi chữ chứ không phải là một regex. (trích dẫn các tác phẩm trong một số phiên bản cũ của bash, nhưng đã được sửa thành lỗi). – jordanm

0

Kiểm tra giá trị trả về của grep:

sudo service xyz status | grep 'not' &> /dev/null 
if [ $? == 0 ]; then 
    echo "whateveryouwant" 
fi 

Tôi muốn giới thiệu cron, nó hoạt động tốt với MUỐI chồng

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