Câu trả lời:
Một cách khác là chỉ cần kiểm tra trạng thái thoát của grep
chính nó, nó sẽ trả về false (1) nếu không có kết quả khớp và đúng (0) nếu có, bằng cách không sử dụng [
lệnh.
if netstat -lntp | grep ':8080.*java' > /dev/null; then
echo "Found a Tomcat!"
fi
Việc chuyển hướng đến / dev / null là để ngăn nó cũng in dòng tìm thấy ra màn hình.
Bạn có thể làm chính xác hơn, nhưng đơn giản, phù hợp với awk.
if netstat -lnp | awk '$4 ~ /:8080$/ && $7 ~ /java/ {exit(0)} END {exit(1)}'; then …
Để khớp với cấu trúc của lệnh của bạn chặt chẽ hơn, cách di động thực hiện khớp ký tự đại diện trên một chuỗi trong một vỏ là với case
cấu trúc.
case "$(netstat -lnp | grep ':8080')" in
*java*) echo "Found a Tomcat!";;
esac
Một ví dụ thực tế khác :)
if [[ $(HEAD mycompany-intranet.com | grep '200\ OK' | wc -l) = "1" ]]; then
echo doing some intranet settings (proxy, etc)
else
echo doing some work-at-home settings (proxy, etc)
fi
HEAD
làm gì? Đó có phải là một chức năng tùy chỉnh hoặc bí danh trên hệ thống của bạn?
usr/bin/HEAD → lwp-request
. Và lwp-request dường như là cái này . Không chắc chắn, làm thế nào tôi đến với nó (không chắc chắn bằng tay), nếu tất cả đều ở đó theo mặc định. Có vẻ như một chữ thường usr/bin/head
cũng .
-q
tùy chọn grep thay vì chuyển hướng đến / dev / null. Với-q
, grep không xuất bất cứ thứ gì và ngừng tìm kiếm sau trận đấu đầu tiên.