Ich versuche zu lernen, wie man getopts verwendet, damit ich Skripte mit analysierter Eingabe haben kann (obwohl ich denke, dass getopts besser sein könnte). Ich versuche nur ein einfaches Skript zu schreiben, um die Prozentsätze der Partitionsnutzung zurückzugeben. Das Problem ist, dass eine meiner Bash-Funktionen nicht zu mögen scheint, dass ich $1
als Variable innerhalb der Funktion verweise . Der Grund, auf den ich verweise, $1
ist, dass der get_percent
Funktion ein Einhängepunkt als optionales Argument übergeben werden kann, das anstelle aller Einhängepunkte angezeigt werden soll.
Das Skript
#!/usr/bin/bash
set -e
set -u
set -o pipefail
get_percent(){
if [ -n "$1" ]
then
df -h $1 | tail -n +2 | awk '{ print $1,"\t",$5 }'
else
df -h | tail -n +2 | awk '{ print $1,"\t",$5 }'
fi
}
usage(){
echo "script usage: $(basename $0) [-h] [-p] [-m mount_point]" >&2
}
# If the user doesn't supply any arguments, we run the script as normal
if [ $# -eq 0 ];
then
get_percent
exit 0
fi
# ...
Die Ausgabe
$ bash thing.sh
thing.sh: line 8: $1: unbound variable
$ bash -x thing.sh
+ set -e
+ set -u
+ set -o pipefail
+ '[' 0 -eq 0 ']'
+ get_percent
thing.sh: line 8: $1: unbound variable
getopts
hat, oder? Ihr Skript wird-u
vor dem Aufruf beendetgetopts
.