unix有一个优点就是标准UNIX命令在执行时都具有相同的命令行格式:
复制代码代码如下:
#新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选项要求显示新创建文件的文件名。
复制代码代码如下:
#--拷贝程序
(责任编辑:IT)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 |