Comment faire un OU logique de fonctionnement dans les scripts shell
Je suis en train de faire une simple condition de vérifier, mais il ne semble pas fonctionner.
Si $#
est égal à 0
ou est supérieure à 1
puis dire bonjour.
J'ai essayé la syntaxe suivante, sans succès:
if [ "$#" == 0 -o "$#" > 1 ] ; then
echo "hello"
fi
if [ "$#" == 0 ] || [ "$#" > 1 ] ; then
echo "hello"
fi
- Ils travaillent tous les deux pour moi. Avez-vous préciser une coquille dans la ligne shebang?
- J'ai effectivement oublié la ligne shebang, mais je l'ai testé avec il tout à l'heure et ça n'a pas fonctionné.
>
est redirection de la sortie en sh/bash. Maintenant, vous avez probablement un fichier nommé1
.- Pour plus d'informations sur Bash comparaisons, veuillez voir mes réponses aux questions précédentes here et here. Pour plus d'informations concernant les supports, entre crochets doubles et doubles parenthèses, voir ma réponse here.
- Il ne fonctionne pas parce que vous faites la compraison: utilisation de "$#" == "0" ou $# -eq 0
Vous devez vous connecter pour publier un commentaire.
Cela devrait fonctionner:
Je ne sais pas si c'est différent dans d'autres coquilles, mais si vous souhaitez utiliser <, >, vous devez les placer à l'intérieur de doubles parenthèses comme ceci:
[[ ]]
trop?[[ ]]
Ce code fonctionne pour moi:
Je ne pense pas que sh prend en charge le "==". Utiliser "=" pour comparer des chaînes et -eq pour comparer ints.
pour plus de détails.
-gt
pour plus de. Ou tout simplement le remplacer tous avec[ $# -ne 1 ]
.Si vous utilisez bash code de sortie du statut de $? en tant que variable, il est préférable de le faire:
Parce que si vous n':
La partie gauche de la OU modifie la $? variable, de sorte que le partie droite de la OU n'a pas l'original $? valeur.
Parfois vous avez besoin d'utiliser des doubles crochets, sinon vous obtenez une erreur comme trop d'arguments
Si un script bash
avez-vous essayé quelque chose comme ceci:
echo
s bonjour, même si j'ai un seul argument.$#
pourrait être la valeur de retour de la première épreuve?De Bash Manuel De Référence → 3.4.2 Paramètres Spéciaux
Par conséquent,
$#
sera toujours 0 ou un plus grand nombre entier.Donc, si vous voulez faire quelque chose chaque fois que
$#
est soit 0 ou plus grand que 1, vous n'avez qu'à vérifier si$#
est ou n'est pas1
:Il utilise la syntaxe:
[[ -n $A ]] && echo 1 || echo 2
Et en Bash
OU en Bash