getopts 获取 处理 命令行选项

发布时间:2020-03-28编辑:脚本学堂
获取UNIX类型的选项:unix有一个优点就是标准UNIX命令在执行时都具有相同的命令行格式:command -options parameters

获取UNIX类型的选项:
unix有一个优点就是标准UNIX命令在执行时都具有相同的命令行格式:
command -options parameters
如果在执行shell程序也采用上述格式,Bourne Shell中提供了一条获取和处理命令行选项的语句,即getopts语句。该语句的格式为:
getopts option_string variable
其中option_string中包含一个有效的单字符选项。若getopts命令在命令行中发现了连字符,那么它将用连字符后面的字符同option_string相比较。若有匹配,则把变量variable的值设为该选项。若无匹配,则variable设为?。当getopts发现连字符后面没有字符,会返回一个非零的状态值。Shell程序中可以利用getopts的返回值建立一个循环。
下面代码说明了linuxjishu/14052.html target=_blank class=infotextkey>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

Getopt and getopts 的参考链接:http://aplawrence.com/Unix/getopts.html

您可能感兴趣的文章:

shell技巧之使用getopts
学习shell中的getopts
linux shell中的比较符号与特殊符号
linux shell 特殊字符 大全
linux shell变量$#,$@,$0,$1,$2的解释
shell IFS变量和$* shell中“$”变量的中文说明
shell变量$#,$@,$0,$1,$2详解