Yanıtlar:
Bash [[
koşullu yapısını kullanın ve $(
<command> )
komut değiştirme kuralını tercih edin . Ek olarak, [[
değişken değerlerin kelime bölünmesini önler , bu nedenle komut değiştirme bitini alıntılamaya gerek yoktur.
if [[ $(netstat -lnp | grep ':8080') = *java* ]]; then
echo "Found a Tomcat!"
fi
Diğer bir alternatif, basitçe grep
kendisinin çıkış durumunu test etmektir ; ki bu, eğer eşleşme olmazsa false (1), eğer öyleyse doğru (0), [
komutu kullanmadan döndürecektir .
if netstat -lntp | grep ':8080.*java' > /dev/null; then
echo "Found a Tomcat!"
fi
/ Dev / null yönüne yönlendirilmesi, bulunan satırı ekrana yazdırmasını da engellemektir.
Awk ile eşleştirerek daha kesin, ancak basit bir işlem yapabilirsiniz.
if netstat -lnp | awk '$4 ~ /:8080$/ && $7 ~ /java/ {exit(0)} END {exit(1)}'; then …
Komutunuzun yapısını daha yakından eşleştirmek için, kabuktaki bir ipte joker eşleştirmesi yapmanın taşınabilir yolu case
yapı iledir.
case "$(netstat -lnp | grep ':8080')" in
*java*) echo "Found a Tomcat!";;
esac
Başka bir gerçek dünya örneği :)
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
? Bu, sisteminizde özel bir işlev veya takma ad mı?
usr/bin/HEAD → lwp-request
. Ve LWP-istek gibi görünen bu bir . Emin değilim, nasıl geldiğime (kesin olarak elle değil), hepsinin varsayılan olarak orada olup olmadığına. Bir küçük harf olduğu görülmektedir usr/bin/head
yanı .
-q
yerine / dev / null yönlendirme grep seçeneği.-q
Grep ile hiçbir şey çıkmaz ve ilk maçtan sonra aramayı durdurur.