Dai unocchiata a questo esempio di codice:
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
Per Ad esempio, loutput del terminale di $./new.sh q w e r t y u i o p
sarà:
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
E loutput di $./new.sh q w e r t y u i o
sarà:
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.
Domanda : cosa significa -n
?
Commenti
Rispondi
[
è un altro nome per il test
integrato, vedi qui e qui , anche questo .
Quella sequenza di if
le dichiarazioni probabilmente sarebbero meglio come un ciclo. In Bash potremmo usare lespansione indiretta:
for ((i=1 ; i <= 10 ; i++)) ; do if [ -n "${!i}" ] ; then echo "${!i}" fi done
Lidioma più comune sarebbe probabilmente usare shift
su ogni iterazione, ma distrugge lelenco degli argomenti.
Inoltre, citando: qui $0
è fuori dalle virgolette. Nella maggior parte dei casi è più utile mantenere tutte le espansioni variabili tra virgolette, a meno che non si desideri esplicitamente suddivisione di parole ed espansione del nome file.
echo "Name of this script: "$0""
Quindi, scrivi piuttosto:
echo "Name of this script: $0"
Commenti
- Puoi usare
shift
allinterno di una funzione e non influenzare lelenco degli argomenti del chiamante ', anche se usare una funzione solo per questo è ovviamente un po hackish.
help test
?[
e-n
siano orribili da cercare.bash -n myscript
, esegue un controllo della sintassi sullo script invece di eseguirlo.