1.标准unix的命令行格式

  command -option parameters

2.如果在shell脚本中也采用上述格式, bourne shell中提供了一条获取和处理命令行选项的语句,getopts,格式为

  getopts option_string variable

  A.opting_string中包含一个有效的单字符选项,如果getopts在命令行中发现了连字符-,那么他将用两字符后面的字符同option_string想比较:

     若有匹配,则把变量variable的值设为该选项。

     若无匹配,则variable设为?。

     当getopts发现连字符后面没有字符,会返回一个非零的状态值

3. 有时侯选项中还带一个值,getopts命令同样也支持这一功能。这时需要在option_string中选项字母后加一个冒号。当getopts命令发现冒号后,会从命令行该选项后读取该值。

    若该值存在,那么将被存在一个特殊的变量OPTARG中。

    如果该值不存在,getopts命令将在OPTARG中存放一个问号,并且在标准错误输出上显示一条消息。

  optstring  option字符串,会逐个匹配

  varname    每次匹配成功的选项

  arg        参数列表,没写时它会取命令行参数列表

  $OPTIND    特殊变量,option index,会逐个递增, 初始值为1

  $OPTARG    特殊变量,option argument,不同情况下有不同的值

  细则1:

    当optstring以”:“开头时,getopts会区分invalid option错误和miss option argument错误。

  invalid option时,varname会被设成?,$OPTARG是出问题的option;

  miss option argument时,varname会被设成:,$OPTARG是出问题的option。

  如果optstring不以”:“开头,invalid option错误和miss option argument错误都会使

  varname被设成?,$OPTARG是出问题的option。

  细则2:

    当optstring中的字母跟”:“时,表明该option可接参数,参数(argument)放在$OPTARG中;

  如果缺参数,且optstring是以”:“开头,则varname的值会是:,$OPTARG是该option,

  否则varname的值是?,$OPTARG是该option。(参照细则1)

例子:

ans73089:/u/porting>./test2
it is done


ans73089:/u/porting>./test2 -p /shome/dms/KKK27SU4
begin
PACKAGE is :/shome/dms/KKK27SU4
it is done


ans73089:/u/porting>./test2 -p okla!!
begin
PACKAGE is :okla!!
it is done

ans73089:/u/porting>vi test2
"test2" 22 lines, 290 characters
#!/usr/bin/sh
usage()
{
        echo "Usage: instpkg [-p packagename]" 1>&2
        exit 1
}

PACKAGE=SMSADM

while getopts "p:" i
do
        case ${i} in
                p)
                        echo "begin"
                        PACKAGE=${OPTARG}
                        echo "PACKAGE is :"$PACKAGE
                        ;;
                *)
                        usage
                        exit 1
        esac
done
echo "it is done"

 note:

"p:" 注意这里的双引号有的加,有的不加,作用是一样的。