Réponses:
Utilisez la [[
construction conditionnelle bash et préférez la convention de substitution de commande $(
<command> )
. De plus, [[
empêche le fractionnement des mots des valeurs de variable, il n’est donc pas nécessaire de citer le bit de substitution de commande.
if [[ $(netstat -lnp | grep ':8080') = *java* ]]; then
echo "Found a Tomcat!"
fi
Une autre alternative consiste simplement à tester le statut de sortie de grep
lui-même, ce qui renverra false (1) s'il n'y a pas de correspondance et true (0) s'il y en a une, en n'utilisant pas la [
commande.
if netstat -lntp | grep ':8080.*java' > /dev/null; then
echo "Found a Tomcat!"
fi
La redirection vers / dev / null a pour but d'empêcher l'impression de la ligne trouvée à l'écran.
Vous pouvez faire plus précis, mais simple, correspondant à awk.
if netstat -lnp | awk '$4 ~ /:8080$/ && $7 ~ /java/ {exit(0)} END {exit(1)}'; then …
Pour correspondre plus étroitement à la structure de votre commande, le moyen portable de faire une correspondance générique sur une chaîne dans un shell est d'utiliser la case
construction.
case "$(netstat -lnp | grep ':8080')" in
*java*) echo "Found a Tomcat!";;
esac
Un autre exemple du monde réel :)
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
-il? Est-ce une fonction personnalisée ou un alias sur votre système?
usr/bin/HEAD → lwp-request
. Et lwp-request semble être celui-ci . Pas sûr, comment je suis arrivé (pas manuellement manuellement), de si tout est là par défaut. Il semble y avoir un minuscule usr/bin/head
aussi bien .
-q
option de grep au lieu de rediriger vers / dev / null. Avec-q
, grep ne génère rien et arrête la recherche après le premier match.