www.mamboteam.com
aptitude : me and my debian - a work in progress  
Startsida arrow bash arrow BASH och parametrar
2008-07-09
 
 
Huvudmeny
Startsida
debian
bash
Forum
Användarmeny
tidigare material
nyheter
grafik
Artikeltips
BadVista
BASH och parametrar  E-post

Anta att man i ett BASH-script vill ta emot parametrar som ska ange hur scriptet ska bete sig. Man kanske vill att scriptet ska visa utdata i en browser om man anger --browser firefox och skicka det till en fil om man anger -o filnamn.txt.

I det här exemplet antas att man kan ange tre parametrar - alla valfria.

 
-sv volume
-v verbose
-u user

Scriptet kan alltså anropas på en mängd olika sätt :

parameter.sh "hejsan" -sv 34
parameter.sh -u marwal -v yes Sagogryn Mannagryn
parameter.sh -sv true -v false -u root Hej Baberiba

Men hur ska skriptet kunna avgöra vad som är styrparametrar och vad som inte är det?

 
#!/bin/bash
SV=0
V=0
U=0
OUT=""
until [ -z "$1" ]
do
  if [ $SV == 1 ]; then SV=$1
  elif [ $V == 1 ]; then V=$1
  elif [ $U == 1 ]; then U=$1
  else
    case "$1" in
      "-sv") SV=1;;
      "-v") V=1;;
      "-u") U=1;;
      *) OUT="$OUT $1";;
    esac
  fi
  shift
done
echo "Utdata: $OUT"
if [ $SV != 0 ]; then echo "Volym: $SV"; fi
if [ $V != 0 ]; then echo "Verbose: $V"; fi
if [ $U != 0 ]; then echo "User: $U"; fi"
 

Om ovanstående kod anropas med : parameter.sh -sv 47 Arne -u Sprängd Anka -v true, ges utdata :

Utdata:  Arne Anka
Volym: 47
Verbose: true
User: Sprängd
Läs mer om BASH och parametrar
 

Edit: 2007-04-17
Allt det där var gott och väl innan jag upptäckte den inbyggda funktionen 'getopts'. Exempel :

 
#!/bin/bash
 
while getopts "abhv:" options; do
    case $options in
        a ) echo -n "A=$OPTARG, " ;;
        b ) echo -n "B=$OPTARG, " ;;
        h ) echo -n "H=$OPTARG, " ;;
        v ) echo -n "V=$OPTARG, " ;;
    esac
done
echo

Anropas scriptet såhär :

scriptet -v 10 -ah

...ges utdata :

V=10, A=, H=

Så, jag har lärt mig något nytt och du kan glömma allt jag svamlade om ovan.

Kommentarer (0)Add Comment

Skriv kommentar

busy
 
< Föregående
 
Top! Top!