Bash Shell 命令行处理

Bash shell 内置命令getopts类似于C标准库

getopts有两个参数,一个由字母和冒号组成的字符串以及一个变量名。第一个参数是合法选项的列表;如果选项需要一个参数,那么参数后面必须跟一个冒号。

getopts分解第一个参数,将选项提取出来,然后依次将每个选项(没有选项前的下划线“_”)赋值给第二个参数,第二个参数的变量名由用户赋予。只要选项仍然在处理

getopts很返回0。但是当它处理完所有选项和参数后他返回1,这使得getopts很适合配合while循环来处理命令行参数


获取UNIX类型的选项:
  unix有一个优点就是标准UNIX命令在执行时都具有相同的命令行格式:
  command -options parameters
  如果在执行Shell程序也采用上述格式,Bourne Shell中提供了一条获取和处理命令行选项的语句,即getopts语句。该语句的格式为:
  getopts option_string variable
  其中option_string中包含一个有效的单字符选项。若getopts命令在命令行中发现了连字符,那么它将用连字符后面的字符同option_string相比较。若有匹配,则把变量variable的值设为该选项。若无匹配,则variable设为?。当getopts发现连字符后面没有字符,会返回一个非零的状态值。Shell程序中可以利用getopts的返回值建立一个循环。
  下面代码说明了date命令中怎么使用getopts命令处理各种选项,该程序除了完成unix的标准命令date的功能外,还增加了许多新的选项。 
  #新date程序 
  if [ $# -lt 1 ] 
  then 
    date 
  else 
    while getopts mdyDHMSTJjwahr OPTION 
    do 
      case $OPTION 
      in 
        m)date '+%m';; 
        d)date '+%d';; 
        y)date '+%y';; 
        D)date '+%D';; 
        H0date '+%H';; 
        M)date '+%M';; 
        S)date '+%S';; 
        T)date '+%T';; 
        j)date '+%j';; 
        J)date '+%y%j';; 
        w)date '+%w';; 
        a)date '+%a';; 
        h)date '+%h';; 
        r)date '+%r';; 
        \?)echo "无效的选项!$OPTION";; 
      esac 
    done 
  fi
有时侯选项中还带一个值,getopts命令同样也支持这一功能。这时需要在option_string中选项字母后加一个冒号。当getopts命令发现冒号后,会从命令行该选项后读取该值。若该值存在,那么将被存在一个特殊的变量OPTARG中。如果该值不存在,getopts命令将在OPTARG中存放一个问号,并且在标准错误输出上显示一条消息。
  下面的例子,实现拷贝一个文件,并给文件赋一个新的名字。-c选项指定程序拷贝的次数,-v选项要求显示新创建文件的文件名。
  #--拷贝程序
  COPIES=1 
  VERBOSE=N 
  while getopts vc:OPTION 
  do 
    case $OPTION 
    in 
      c)COPIES=$OPTARG;; 
      v)VERBOSE=Y;; 
      \?)echo "无效参数!" 
        exit 1;; 
    esac 
  done 
  if [ $OPTIND -gt $# ] 
  then 
    echo "No file name specified" 
     exit 2 
  fi 
  shift 'expr $OPTIND - 1' 
  FILE=$1 
  COPY=0 
  while [ $COPIES -gt $COPY ] 
  do 
    COPY='expr $COPY + 1' 
    cp $FILE $ {FILE} $ {COPY} 
    if [ VERBOSE = Y } 
    then 
      echo ${FILE} $ {COPY} 
    fi 
  done 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值