Bash: If/Else dans une ligne
Je suis en train de vérifier si un processus (supposons qu'il est appelé some_process
) est en cours d'exécution sur un serveur. Si c'est le cas, echo 1, sinon echo 0.
C'est la commande que j'utilise, mais il ne fonctionne que partiellement (plus d'infos ci-dessous). Notez que j'ai besoin d'écrire le script en une seule ligne.
ps aux | grep some_proces[s] > /tmp/test.txt && if [ $? -eq 0 ]; then echo 1; else echo 0; fi
Remarque: La [s]
dans some_proces[s]
est de prévenir les grep
de retourner lui-même.
Si some_process
est en cours d'exécution, puis "1"
obtient un écho, ce qui est bien. Toutefois, si some_process
n'est pas en cours d'exécution, rien n'est fait l'écho.
- Vous pouvez utiliser
ps -Ccmd
à trouver des processus de commande dont le nom est "cmd", qui peut complètement éliminer legrep
.ps
va définir le code de sortie pour certains une valeur non nulle si elle ne parvient pas à trouver un processus d'appariement.
Vous devez vous connecter pour publier un commentaire.
Il n'est pas nécessaire explicitement vérifier
$?
. Il suffit de ne:Noter que cela dépend de l'echo pas de faute de, qui certainement n'est pas garanti. Un moyen plus fiable pour écrire:
echo 1
échouer, alorsecho 0
sera exécuté. Dans ce cas, echo 1 ne manquera jamais, mais Note que des && B || C n'est pas si-alors-sinon. C peut s'exécuter lorsque A est vrai.(à partir de shellcheck).if ps aux | grep some_proces[s]; then echo 1; else echo 0; fi
. Localement, cela semble fonctionner pour moi. Est-ce parce que l'OP avait la redirection dans la commande il essayé?grep -q
ou redirigé vers /dev/null).pgrep
.&&
moyens "et en cas de succès"; en plaçant votreif
déclaration sur le côté droit, vous assurer qu'il sera exécuté uniquement sigrep
retourne0
. Pour la fixer, utiliser;
à la place:(ou tout simplement utiliser un saut de ligne).
Utilisation
grep -vc
ignorergrep
dans leps
de sortie et de compter les lignes simultanément.Vous pouvez faire plein usage de la
&&
et||
opérateurs comme ceci:Pour l'exclusion de grep lui-même, vous pouvez aussi faire quelque chose comme: