Shell scripting med parameters

23-08
2009

Aha jeg fandt for nyligt ud af hvordan man får et shell script til at tage imod argumenter lige som almindelige programmer gør det.

Normalt ser mine shell scripts ud lige som denne

./shellscript.sh username password host

ovenstående script ville fylde variablerne $1 med “username” $2 med “password” og $3 med “host”
problemet er bare at for at kunne bruge disse variabler i scriptet skal man sørge for at de altid bliver skrevet i samme rækkefølge således at “password” eller “host” ikke lige pludselig står i $1 variablen

Men Hvis jeg nu gerne vil have den til at fungere ligesom som mysql f.eks. gør det.
mysql -u "user" -p "password" -h "host"
her er det nemlig ligegyldigt i hvilken rækkefølge parameterne kommer.

det samme kan man alså opnå i shell scripts ved at bruge “getopts”

her er et eksempel:

#!/bin/sh
while getopts 'ab:' OPTION
do
case $OPTION in
a) aflag=1
;;
b) bflag=1
bval="$OPTARG"
;;
?) printf "Usage: %s: [-a] [-b value] args\n" $(basename $0)>&2
exit 2
;;
esac
done

Her fortæller jeg at scriptet kan forvente parameterne -a og -b samt at -b kommer med en værdi.
dette gør at jeg kan køre scriptet som jeg vil uden at det går i stykker.

./test.sh -a -b blabla
./test.sh -b blabla -a

Kilde: http://www.linux.com/archive/feature/118031

3 kommentarer til “Shell scripting med parameters”
Dennis Andersen
24-08-2009

Cool kort og lige til, mere af det ;)

24-08-2009

Ja det er dejligt at se i skriver… Selv om jeg nok er lidt uden for i de her samtaler.. ;-)

16-10-2009

Nice… Man kan også gøre det på den lidt mere gammeldags måde og bruge $1 $2 $3… det giver parametrene. $@ giver hele kommandolinien.

Har du en kommentar?