快速业务通道

linux getopts 学习笔记

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-02
获取UNIX类型的选项:
  unix有一个优点就是标准UNIX命令在执行时都具有相同的命令行格式:
  command -options parameters
  如果在执行Shell程序也采用上述格式,Bourne Shell中提供了一条获取和处理命令行选项的语句,即getopts语句.该语句的格式为:
  getopts option_string variable
  其中option_string中包含一个有效的单字符选项.若getopts命令在命令行中发现了连字符,那么它将用连字符后面的字符同option_string相比较.若有匹配,则把变量variable的值设为该选项.若无匹配,则variable设为?.当getopts发现连字符后面没有字符,会返回一个非零的状态值.Shell程序中可以利用getopts的返回值建立一个循环. 有时侯选项中还带一个值,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错误都会使 拥有帝国一切,皆有可能。欢迎访问phome.net
varname被设成?,$OPTARG是出问题的option. 细则2:当optstring中的字母跟”:“时,表明该option可接参数,参数(argument)放在$OPTARG中;
如果缺参数,且optstring是以”:“开头,则varname的值会是:,$OPTARG是该option,
否则varname的值是?,$OPTARG是该option.(参照细则1)
--------------- $ # 传递到脚本的参数个数
$ * 以一个单字符串显示所有向脚本传递的参数.与位置变量不同,此选项参数可超过9个
$ $ 脚本运行的当前进程I D号
$ ! 后台运行的一个进程的进程I D号
$ @ 与$ #相同,但是使用时加引号,并在引号中返回每个参数
$ - 显示s h e l l使用的当前选项,与s e t命令功能相同
$ ? 显示命令的退出状态.0表示没有错误,其他任何值表明有错误. ------------ shift 用于重新分配位置参数,其实就是把向参数左移动一个位置如:$1<--$2,$2<--$3老的$1将被删 除掉. ------------
范例: [root@localhost ~]# cat getopts2
#!/bin/sh
while getopts :ab: name
do
case $name in
a) aflag=1
;;
b) bflag=1
bval=$OPTARG
;;
?) echo "USAGE:`basename $0` [-a] [-b value]"
exit 1
;;
esac
done
if [ ! -z $aflag ] ; then
echo "option -a specified"
echo "$aflag"
echo "$OPTIND"
fi
if [ ! -z $bflag ] ; then
echo "option -b specified"
echo "$bflag"
echo "$bval"
echo "$OPTIND"
fi echo "here $OPTIND"
shift $(($OPTIND -1))
echo "$OPTIND"
echo " `shift $(($OPTIND -1))` " 拥有帝国一切,皆有可能。欢迎访问phome.net

拥有帝国一切,皆有可能。欢迎访问phome.net

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号