Script Bash avec base if/else et le nombre de processus en cours d'exécution basé sur un modèle
Je suis en train d'écrire un script qui compte le nombre de processus en cours d'exécution correspondant à un patern. Si elle dépasse une valeur codée en dur de faire quelque chose...d'autre faire quelque chose d'autre.
Je trouve le nombre de processus à l'aide de:
ps ax | grep process_name | wc -l | sed -e "s: ::g"
Si la sortie de la commande ci-dessus est supérieure à 15 ans..il devrait echo "Done". Sinon, l'echo "Pas Complet".
Jusqu'à présent, j'ai ceci mais ça ne fonctionne pas:
numprocesses=ps ax | grep sms_queue | wc -l | sed -e "s: ::g"
if [ $numprocesses -le "15" ] ; then
echo "Done."
else
echo "Not Complete."
fi
Vous devez vous connecter pour publier un commentaire.
Vous avez eu quelques problèmes.
xyz
de commande, vous devez utiliser$(xyz)
.grep
processus (car lui aussi a le rythme, il est à la recherche de), vous devez utiliser le[firstchar]rest
grep motif (ou vous pouvez utiliser| grep sms_queue | grep -v grep
pour supprimer legrep
processus de l'comptent aussi.if (($numprocesses > 15)); then ...
. C'est agréable à lire.[[ ]]
choses. Je vous conseille d'utiliser le bon vieux[
akatest
.[[...]]
et((...))
sont moins mobiles que[...]
. C'est un classique compromis entre portabilité et la facilité de maintenance. Pour moi j'ai fait le choix de se concentrer sur la maintenabilité, car tous les environnements-je me soucier de disposer d'une version récente de bash.bash
- je pense que vous trouverez à la fois[[ ]]
et(( ))
sont portables au sein de ce domaine.[...]
, par exemple la manipulation des chaînes vides, etc.|wc -l
, il suffit d'ajouter le-c
drapeau de grepSi vous souhaitez copier la sortie d'une commande dans une variable, utilisez cette syntaxe:
$(...)
est préférable. Il est plus facile à lire (ou ne peuvent pas être confondu avec'...'
) et peuvent être imbriquées.echo $(basename $(dirname /usr/local/bin/))
mais pas le même à l'aide de backticks (aucune idée de comment format en markdown).variable="$(my command)"
. Même si il y a un argument cité à l'intérieur de la commande, bash va le gérer correctement.Comment sur
?
Et le tout (le portable) version du script devrait ressembler à ceci:
csh
. Ou était-ce une auto-service de la définition de portable, je n'ai pas entendu parler avant? 🙂