Je n'arrive pas à comprendre comment faire fonctionner ce script (supposé être simple). Ce que je veux, en gros, exécuter différentes choses en fonction de l’état de mon ordinateur Parallels, par exemple:
if [ prlctl list --info ubuntu-vm | grep State == "State: running" ] ; then
echo 'machine is running'
else
echo 'machine is not running'
fi
Bien sûr ça ne marche pas
prlctl list --info ubuntu-vm | grep -q "State: running" && echo "machine is running" || echo "machine is not running"
Une vérification alternative, moins "propre" mais plus proche de ce que la question tentait de réaliser.
Rappelez-vous qu’en
[
son cœur n’est qu’une commande. Il accepte toujours un nombre spécifique de paramètres et quitte avec le statut de sortie 0 (succès) ou 1 (échec), comme le font toutes les autres commandes. Par exemple, lorsque vous comparez deux chaînes, la syntaxe est[
, chaîne 1,==
, chaîne 2,]
.À l'heure actuelle, vous utilisez ceci comme
if
condition:Mais c'est ambigu à plusieurs égards. Comment
[
savoir que sur la gauche vous avez une commande à exécuter et non une chaîne fixe? Comment pourrait-il savoir que l'==
opérateur de comparaison de chaînes est plutôt qu'un simple argumentgrep
? Comment pourrait-il savoir que cela|
fait partie de la valeur de gauche plutôt que de séparer la commande en[ prlctl list --info ubuntu-vm
etgrep State == "State: running" ]
?Donc, le côté gauche doit également être cité. De plus, puisque vous voulez comparer le résultat de cette commande, plutôt que les "prctl list --info ..." des mondes eux-mêmes, vous avez besoin de l'
$(…)
opérateur:la source
[
une commande, ce qui semble probablement très étranger à quelqu'un pour qui ne connaît que des langages comme Java ou Python.if
instruction accepte une commande arbitraire en tant que condition (if <command>; then <commands...>; fi
). La syntaxe est décrite dansman bash
si vous travaillez avec le shell 'bash'.