Chinaunix首页 | 论坛 | 博客
  • 博客访问: 543761
  • 博文数量: 92
  • 博客积分: 2511
  • 博客等级: 少校
  • 技术积分: 932
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-19 10:10
文章分类
文章存档

2011年(6)

2010年(27)

2009年(37)

2008年(22)

我的朋友

分类: LINUX

2010-02-14 15:37:22

getopts optstring varname [arg ...]

optstring  option字符串,会逐个匹配
varname    每次匹配成功的选项
arg        参数列表,没写时它会取命令行参数列表

$OPTIND    特殊变量,option index,会逐个递增
$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)

简单的sample:

#!/bin/bash

SKIPBLANKS=
TMPDIR=/tmp
CASE=lower

while getopts :bt:u arg
do
    case $arg in
        b) 
SKIPBLANKS=TRUE
                  echo "If skip blanks? $SKIPBLANKS"
                  ;;

        t) if [ -"$OPTARG" ]
                    then
                 
   TMPDIR=$OPTARG
                    echo "Temp dir is $TMPDIR."
                  else
                    echo "$0: $OPTARG is not a directory." >&2
                    exit 1
                  fi
                  ;;

        u) 
CASE=upper
                  echo "Case sensitivity is $CASE."
                  ;;

        :) echo "$0: Must supply an argument to -$OPTARG." >&2
                  exit 1
                  ;;

        \?) echo "Invalid option -$OPTARG ignored." >&2
                  ;;
        esac
done

阅读(744) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~