Risposte:
Utilizzare il [[
costrutto condizionale bash e preferire la convenzione di sostituzione comando $(
<comando> )
. Inoltre, [[
impedisce la suddivisione delle parole dei valori delle variabili, pertanto non è necessario citare il bit di sostituzione dei comandi.
if [[ $(netstat -lnp | grep ':8080') = *java* ]]; then
echo "Found a Tomcat!"
fi
Un'altra alternativa è semplicemente testare lo stato di uscita di grep
se stesso, che restituirà false (1) se non c'era corrispondenza e true (0) se ce n'era una, non usando il [
comando.
if netstat -lntp | grep ':8080.*java' > /dev/null; then
echo "Found a Tomcat!"
fi
Il reindirizzamento su / dev / null è per impedire che stampi anche la linea trovata sullo schermo.
Puoi fare una corrispondenza più precisa, ma semplice, con awk.
if netstat -lnp | awk '$4 ~ /:8080$/ && $7 ~ /java/ {exit(0)} END {exit(1)}'; then …
Per abbinare più da vicino la struttura del tuo comando, il modo portatile di eseguire la corrispondenza jolly su una stringa in una shell è con il case
costrutto.
case "$(netstat -lnp | grep ':8080')" in
*java*) echo "Found a Tomcat!";;
esac
Un altro esempio del mondo reale :)
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
? È una funzione personalizzata o un alias sul tuo sistema?
usr/bin/HEAD → lwp-request
. E lwp-request sembra essere questo . Non sono sicuro di come ci sono arrivato (non di sicuro manualmente), se per impostazione predefinita è tutto lì. Sembra che ci sia un minuscolo usr/bin/head
pure .
-q
opzione grep invece di reindirizzare a / dev / null. Con-q
, grep non emette nulla e interrompe la ricerca dopo la prima corrispondenza.