Gerçekleştirilen bir komutun sonucundan bir if ifadesi nasıl yapılır


54

Yürütülen bir komutun çıktısından bir IF ifadesi yapmaya çalışıyorum. İşte nasıl yapmaya çalışıyorum ama işe yaramadı. Bunu yapmanın doğru yolunu bilen var mı?

if [ "`netstat -lnp | grep ':8080'`" == *java* ]; then
  echo "Found a Tomcat!"
fi

Yanıtlar:


65

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

30

Diğer bir alternatif, basitçe grepkendisinin çı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.


12
Not -qyerine / dev / null yönlendirme grep seçeneği. -qGrep ile hiçbir şey çıkmaz ve ilk maçtan sonra aramayı durdurur.
Stéphane Chazelas 24:12

5

Daha da basit,

netstat -lntp | grep ':8080.*java' > /dev/null && command

Sadece bir şey yapmak istiyorsan.


4

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 caseyapı iledir.

case "$(netstat -lnp | grep ':8080')" in
  *java*)  echo "Found a Tomcat!";;
esac

0

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

Ne yapar HEAD? Bu, sisteminizde özel bir işlev veya takma ad mı?
luckman212

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ı .
Frank Nocke
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.