Ta en titt på detta kodexempel:
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
För Exempel på terminalutgången för $./new.sh q w e r t y u i o p
:
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
Och utdata från $./new.sh q w e r t y u i o
kommer att vara:
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.
Fråga : Vad betyder -n
?
Kommentarer
Svar
[
är ett annat namn för test
inbyggt, se här och här , även detta .
Den sekvensen av if
uttalanden skulle troligen vara bättre än en slinga. I Bash kan vi använda indirekt expansion:
for ((i=1 ; i <= 10 ; i++)) ; do if [ -n "${!i}" ] ; then echo "${!i}" fi done
Det vanligaste idiomet skulle förmodligen vara att använda shift
på varje iteration, men det förstör argumentlistan.
Citera: här $0
är också utanför citaten. I de flesta fall är det mer användbart att hålla alla variabla utvidgningar inom citat, såvida du inte uttryckligen vill ha orddelning och filnamnsexpansion.
echo "Name of this script: "$0""
Så skriv snarare:
echo "Name of this script: $0"
Kommentarer
- Du kan använda
shift
inuti en funktion och inte påverka den som ringer ' s argumentlista, men att använda en funktion bara för det är uppenbarligen lite hackig.
help test
?[
och-n
hemska att söka efter.bash -n myscript
gör gör det en syntaxkontroll på skriptet istället för att köra det.