Comme toute autre commande simple, [ ... ]
ou test
nécessite des espaces entre ses arguments.
if [ "$#" -ne 1 ]; then
echo "Illegal number of parameters"
fi
Ou
if test "$#" -ne 1; then
echo "Illegal number of parameters"
fi
Suggestions
Lorsque vous êtes dans Bash, préférez utiliser à la [[ ]]
place car il ne fait pas de fractionnement de mot et d'expansion de nom de chemin à ses variables que la citation peut ne pas être nécessaire sauf si elle fait partie d'une expression.
[[ $# -ne 1 ]]
Il possède également d'autres fonctionnalités telles que le regroupement de conditions sans guillemets, la correspondance de modèles (correspondance de modèles étendue avec extglob
) et la correspondance d'expressions régulières.
L'exemple suivant vérifie si les arguments sont valides. Il permet un seul argument ou deux.
[[ ($# -eq 1 || ($# -eq 2 && $2 == <glob pattern>)) && $1 =~ <regex pattern> ]]
Pour pures expressions arithmétiques, en utilisant (( ))
à certains peuvent encore être mieux, mais ils sont encore possibles dans [[ ]]
ses opérateurs arithmétiques comme -eq
, -ne
, -lt
, -le
, -gt
ou -ge
en plaçant l'expression comme un seul argument de chaîne:
A=1
[[ 'A + 1' -eq 2 ]] && echo true ## Prints true.
Cela devrait être utile si vous devez également le combiner avec d'autres fonctionnalités de [[ ]]
.
Quitter le script
Il est également logique de quitter le script lorsque des paramètres non valides lui sont transmis. Cela a déjà été suggéré dans les commentaires par ekangas mais quelqu'un a édité cette réponse pour l'avoir -1
comme valeur retournée, donc je ferais aussi bien de le faire correctement.
-1
bien qu'accepté par Bash comme argument, il exit
n'est pas explicitement documenté et ne peut être utilisé comme suggestion courante. 64
est également la valeur la plus formelle car elle est définie sysexits.h
avec #define EX_USAGE 64 /* command line usage error */
. La plupart des outils comme ls
reviennent également 2
sur des arguments invalides. J'avais aussi l'habitude de revenir 2
dans mes scripts mais dernièrement je ne m'en souciais plus vraiment, et j'utilisais simplement 1
dans toutes les erreurs. Mais plaçons-nous 2
ici car c'est le plus courant et probablement pas spécifique au système d'exploitation.
if [[ $# -ne 1 ]]; then
echo "Illegal number of parameters"
exit 2
fi
Références
test
. C'est le nom d'une commande Unix standard, vous ne voudriez pas la masquer.