J'ai besoin de vérifier l'existence d'un argument d'entrée. J'ai le script suivant
if [ "$1" -gt "-1" ]
then echo hi
fi
J'obtiens
[: : integer expression expected
Comment vérifier d'abord l'entrée argument1 pour voir si elle existe ?
Elle l'est :
if [ $# -eq 0 ]
then
echo "No arguments supplied"
fi
La variable $#
vous indique le nombre d'arguments d'entrée passés au script.
Ou vous pouvez vérifier si un argument est une chaîne vide ou non comme :
if [ -z "$1" ]
then
echo "No argument supplied"
fi
Le commutateur -z
testera si l'expansion de "$1" ; est une chaîne nulle ou non. S'il s'agit d'une chaîne nulle, le corps est exécuté.
Essayez :
#!/bin/bash
if [ "$#" -eq "0" ]
then
echo "No arguments supplied"
else
echo "Hello world"
fi
Une autre façon de détecter si des arguments ont été passés au script :
((!$#)) && echo No arguments supplied!
Notez que (( expr ))
entraîne l'évaluation de l'expression selon les règles de Shell Arithmetic.
Pour sortir en l'absence de tout argument, on peut dire :
((!$#)) && echo No arguments supplied! && exit 1
Une autre façon (analogue) de dire ce qui précède serait :
let $# || echo No arguments supplied
let $# || { echo No arguments supplied; exit 1; } # Exit if no arguments!
help let
dit :
`let : let arg [arg ...]``
Évaluer des expressions arithmétiques.
...
Statut de sortie : Si le dernier ARG est égal à 0, let retourne 1 ; let retourne 0 sinon.