Proprio come qualsiasi altro comando semplice [ ... ]
o test
richiede spazi tra i suoi argomenti.
if [ "$#" -ne 1 ]; then
echo "Illegal number of parameters"
fi
O
if test "$#" -ne 1; then
echo "Illegal number of parameters"
fi
suggerimenti
Quando sei in Bash, preferisci usare [[ ]]
invece come non fa la suddivisione delle parole e l'espansione del percorso alle sue variabili che la citazione potrebbe non essere necessaria a meno che non faccia parte di un'espressione.
[[ $# -ne 1 ]]
Ha anche alcune altre caratteristiche come il raggruppamento delle condizioni non quotate, la corrispondenza dei modelli (corrispondenza dei modelli estesa con extglob
) e la corrispondenza regex.
L'esempio seguente verifica se gli argomenti sono validi. Permette un singolo argomento o due.
[[ ($# -eq 1 || ($# -eq 2 && $2 == <glob pattern>)) && $1 =~ <regex pattern> ]]
Per espressioni aritmetiche puri, utilizzando (( ))
ad alcuni può essere ancora meglio, ma sono ancora possibili in [[ ]]
con i suoi operatori aritmetici desiderate -eq
, -ne
, -lt
, -le
, -gt
, oppure -ge
posizionando l'espressione come un singolo argomento stringa:
A=1
[[ 'A + 1' -eq 2 ]] && echo true ## Prints true.
Ciò dovrebbe essere utile se fosse necessario combinarlo con altre funzionalità di [[ ]]
.
Uscita dalla sceneggiatura
È inoltre logico uscire dallo script quando gli vengono passati parametri non validi. Questo è già stato suggerito nei commenti da ekangas ma qualcuno ha modificato questa risposta per averla -1
come valore restituito, quindi potrei anche farlo bene.
-1
sebbene accettato da Bash come argomento, exit
non è esplicitamente documentato e non è giusto usarlo come suggerimento comune. 64
è anche il valore più formale poiché è definito sysexits.h
con #define EX_USAGE 64 /* command line usage error */
. Molti strumenti come ls
restituiscono anche 2
argomenti non validi. Ero anche abituato a tornare 2
nei miei script, ma ultimamente non mi importava più molto, e semplicemente usavo 1
tutti gli errori. Ma posizioniamoci 2
qui poiché è più comune e probabilmente non specifico del sistema operativo.
if [[ $# -ne 1 ]]; then
echo "Illegal number of parameters"
exit 2
fi
Riferimenti
test
. Questo è il nome di un comando Unix standard, non vorrai metterlo in ombra.