J'essaie de faire une simple vérification de l'état, mais cela ne semble pas fonctionner.
Si $#
est égal 0
ou supérieur à 1
alors dites 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
bash
unix
if-statement
sh
fraise
la source
la source
>
est la redirection de sortie en sh / bash. Maintenant, vous avez probablement un fichier nommé1
.Réponses:
Cela devrait fonctionner:
Je ne sais pas si c'est différent dans d'autres shells mais si vous souhaitez utiliser <,>, vous devez les mettre entre parenthèses doubles comme ceci:
la source
Ce code fonctionne pour moi:
Je ne pense pas que sh supporte "==". Utilisez "=" pour comparer les chaînes et -eq pour comparer les entiers.
pour plus de détails.
la source
-gt
supérieur à. Ou remplacez tout simplement par[ $# -ne 1 ]
.Si vous utilisez l'état de code de sortie bash $? comme variable, il vaut mieux faire ceci:
Parce que si vous le faites:
La partie gauche du OU modifie le $? variable, donc la partie droite du OU n'a pas le $? valeur.
la source
Parfois, vous devez utiliser des crochets doubles, sinon vous obtenez une erreur comme trop d'arguments
la source
Si un script bash
la source
avez-vous essayé quelque chose comme ça:
la source
echo
est bon même quand j ai un seul argument.$#
pourrait être la valeur de retour du premier test?Depuis le manuel de référence de Bash → 3.4.2 Paramètres spéciaux
Donc,
$#
sera toujours 0 ou un entier plus grand.Donc, si vous voulez faire quelque chose à partir de
$#
0 ou de plus de 1, il vous suffit de vérifier si$#
oui ou non1
:Cela utilise la syntaxe:
la source
[[ -n $A ]] && echo 1 || echo 2
Et dans Bash
OU dans Bash
la source