Bash/Scripting/Parse Args: Unterschied zwischen den Versionen
Aus SchnallIchNet
Cbs (Diskussion | Beiträge) (Die Seite wurde neu angelegt: #!/bin/sh while [ $1 ]; do case $1 in -u) shift; MYUSER=$1 shift; ;; --quota) shift; Q=$1 ...) |
Cbs (Diskussion | Beiträge) |
||
(8 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | + | __FORCETOC__ | |
− | + | ||
− | + | == Parse with getopts (bash-builtin) == | |
− | case $1 in | + | |
+ | <pre> | ||
+ | while getopts "fhm" OPTION; do | ||
+ | case $OPTION in | ||
+ | f) FORCE=1 ;; | ||
+ | h) print_help; exit ;; | ||
+ | m) BASE="MM" ;; | ||
+ | *) echo "Unknown Argument $OPTION given"; exit 1;; | ||
+ | esac | ||
+ | done | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | == Parse in 'while'-loop == | ||
+ | <pre> | ||
+ | #!/bin/sh | ||
+ | |||
+ | while [ "$1" ]; do | ||
+ | optarg="" | ||
+ | opt="" | ||
+ | case "$1" in | ||
+ | -*=*) | ||
+ | opt=`echo "$1" | sed 's/=.*//'` | ||
+ | optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` | ||
+ | ;; | ||
+ | *) | ||
+ | opt=$1 | ||
+ | ;; | ||
+ | esac | ||
+ | |||
+ | case $opt in | ||
-u) | -u) | ||
− | shift; | + | shift; # shift the '-u' |
MYUSER=$1 | MYUSER=$1 | ||
− | shift; | + | shift; # shift the val |
;; | ;; | ||
− | -- | + | |
− | + | --user) | |
− | + | MYUSER=$optarg; | |
− | shift; | + | shift; # shift the '--user=val' |
;; | ;; | ||
− | -h) | + | |
+ | -h|*) | ||
echo "my help text " | echo "my help text " | ||
− | + | exit 1 | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
;; | ;; | ||
esac | esac | ||
− | + | done | |
+ | |||
+ | echo "\$MYUSER = $MYUSER" | ||
+ | echo "\$Q = $Q" | ||
+ | |||
+ | exit 0 | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | == Parse in 'select'-loop == | ||
+ | |||
+ | <pre> | ||
+ | select opt in $@; do | ||
+ | if [ "$opt" = "Quit" ]; then | ||
+ | echo done | ||
+ | exit | ||
+ | elif [ "$opt" = "Hello" ]; then | ||
+ | echo Hello World | ||
+ | else | ||
+ | clear | ||
+ | echo bad option | ||
+ | fi | ||
+ | done | ||
+ | </pre> | ||
− | + | If you run this script you'll see that it is a programmer's dream for text based menus. You'll probably notice that it's very similar to the 'for' construction, only rather than looping for each 'word' in $OPTIONS, it prompts the user. but use '''case''' construct in the select-loop instead... | |
− | + | ||
− | + | =Siehe auch= | |
+ | [[Bash/Scripting/Skeleton|Vorlage Bash-Script]] <br/> | ||
+ | [[Bash/Scripting/Variables|Gueligkeitsbereiche von Variablen]]<br/> |
Aktuelle Version vom 24. September 2012, 06:03 Uhr
Inhaltsverzeichnis
Parse with getopts (bash-builtin)
while getopts "fhm" OPTION; do case $OPTION in f) FORCE=1 ;; h) print_help; exit ;; m) BASE="MM" ;; *) echo "Unknown Argument $OPTION given"; exit 1;; esac done
Parse in 'while'-loop
#!/bin/sh while [ "$1" ]; do optarg="" opt="" case "$1" in -*=*) opt=`echo "$1" | sed 's/=.*//'` optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) opt=$1 ;; esac case $opt in -u) shift; # shift the '-u' MYUSER=$1 shift; # shift the val ;; --user) MYUSER=$optarg; shift; # shift the '--user=val' ;; -h|*) echo "my help text " exit 1 ;; esac done echo "\$MYUSER = $MYUSER" echo "\$Q = $Q" exit 0
Parse in 'select'-loop
select opt in $@; do if [ "$opt" = "Quit" ]; then echo done exit elif [ "$opt" = "Hello" ]; then echo Hello World else clear echo bad option fi done
If you run this script you'll see that it is a programmer's dream for text based menus. You'll probably notice that it's very similar to the 'for' construction, only rather than looping for each 'word' in $OPTIONS, it prompts the user. but use case construct in the select-loop instead...