Shell 引數的讀取和處理

zhyuh發表於2007-03-20

Shell指令碼經常需要傳入一些引數。下面的指令碼可以作為一個通用模組,在寫shell時用來
1. 指定引數的型別
2. 允許使用者靈活指定引數順序,或者省掉某幾個引數
3. 透過shift命令,將引數傳給指定的變數

注意
1. getopt a:b:c $*
   $*和c之間有空格(必須)
2. basename用處
3. shift用法  

[@more@]

$ cat getopt1
#!/bin/sh

set -- `getopt a:b:c: $*`

getopt_rc=$?

if [ "$getopt_rc" -ne "0" ]; then
  pgm=`basename $0`
  echo "$pgm $getopt_rc Process failed during getopt attempt - illegal parameters"
  exit 10
fi

  while [ $# -gt 0 ]; do
    case $1 in
      -a)
         shift
         p1=$1
         echo "-a is $p1"
         shift
         ;;
      -b)
         shift
         p2=$1
         echo "-b is $p2"
         shift
         ;;
      -c)
         shift
         p3=$1
         echo "-c is $p3"
         shift
         ;;
      --)
         shift
         echo "case --"  #一般shell中直接break結束迴圈,沒有該echo
         break
    esac
  done

執行結果如下:
$ ./getopt1 -a AA -b BB -c CC
-a is AA
-b is BB
-c is CC
 -- case
$ ./getopt1 -b BB
-b is BB
 -- case
$ ./getopt1 -b BB -d DD
getopt: invalid option -- d
-b is BB
 -- case

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/207/viewspace-905998/,如需轉載,請註明出處,否則將追究法律責任。

相關文章