web-dev-qa-db-fra.com

Comment vérifier si aucun paramètre n'est fourni à une commande?

Comment vérifiez-vous si $* est vide? En d'autres termes, comment vérifier si aucun argument n'a été fourni à une commande?

81
well actually

Pour vérifier qu'aucun argument n'a été fourni à la commande, vérifiez la valeur de $# variable alors,

if [ $# -eq 0 ]; then
    echo "No arguments provided"
    exit 1
fi

Si vous souhaitez utiliser $* (pas préférable) puis,

if [ "$*" == "" ]; then
    echo "No arguments provided"
    exit 1
fi

Quelques explications:

La seconde approche n'est pas préférable car dans l'expansion des paramètres positionnels * s'étend aux paramètres positionnels, en commençant par un. Lorsque l'expansion se produit entre guillemets doubles, elle se développe en un seul mot avec la valeur de chaque paramètre séparée par le premier caractère de la variable spéciale IFS. Cela signifie qu'une chaîne est construite. Il y a donc des frais supplémentaires.

D'autre part # s'étend au nombre de paramètres positionnels.

Exemple:

$ command param1 param2

Ici,

Valeur de $# est 2 et la valeur de $* est la chaîne "param1 param2" (sans guillemets), si IFS n'est pas défini. Parce que si IFS n'est pas défini, les paramètres sont séparés par des espaces

Pour plus de détails man bash et lire le sujet nommé Paramètres spéciaux

123
Sachin Divekar

Si vous n'êtes intéressé par le baillage que si un argument particulier est manquant, Substitution de paramètre est parfait:

#!/bin/bash
# usage-message.sh

: ${1?"Usage: $0 ARGUMENT"}
#  Script exits here if command-line parameter absent,
#+ with following error message.
#    usage-message.sh: 1: Usage: usage-message.sh ARGUMENT
16
Pat