Veuillez jeter un œil à cet exemple de code:
MIN=10 if [ -n "$1" ]; then echo "$1"; fi if [ -n "$2" ]; then echo "$2"; fi if [ -n "$3" ]; then echo "$3"; fi if [ -n "$4" ]; then echo "$4"; fi if [ -n "$5" ]; then echo "$5"; fi if [ -n "$6" ]; then echo "$6"; fi if [ -n "$7" ]; then echo "$7"; fi if [ -n "$8" ]; then echo "$8"; fi if [ -n "$9" ]; then echo "$9"; fi if [ -n "${10}" ]; then echo "${10}"; fi echo "List of arguments: "$*"" echo "Name of this script: "$0"" if [ $# -lt "$MIN" ]; then echo "Not enough arguments, need $MIN to run."; fi
Pour exemple, la sortie du terminal de $./new.sh q w e r t y u i o p
sera:
q w e r t y u i o p List of arguments: q w e r t y u i o p Name of this script: ./new.sh
Et la sortie de $./new.sh q w e r t y u i o
sera:
q w e r t y u i o List of arguments: q w e r t y u i o Name of this script: ./new.sh Not enough arguments, need 10 to run.
Question : Que signifie -n
?
Commentaires
Réponse
[
est un autre nom pour le test
intégré, voir ici et ici , aussi this .
Cette séquence de if
les déclarations seraient probablement mieux en boucle. Dans Bash, nous pourrions utiliser lexpansion indirecte:
for ((i=1 ; i <= 10 ; i++)) ; do if [ -n "${!i}" ] ; then echo "${!i}" fi done
Lidiome le plus courant serait probablement dutiliser shift
sur chaque itération, mais cela détruit la liste des arguments.
De plus, la citation: ici $0
est en dehors des guillemets. Dans la plupart des cas, il est plus utile de conserver toutes les extensions de variables entre guillemets, sauf si vous souhaitez explicitement partage de mots et extension de nom de fichier.
echo "Name of this script: "$0""
Alors, écrivez plutôt:
echo "Name of this script: $0"
Commentaires
- Vous pouvez utiliser
shift
dans une fonction et ne pas affecter la liste darguments de lappelant ', bien que lutilisation dune fonction juste pour cela soit évidemment un peu hackish.
help test
?[
et-n
sont horribles à rechercher.bash -n myscript
, il effectue une vérification de la syntaxe sur le script au lieu de lexécuter.