设为首页 收藏本站
查看: 981|回复: 0

shell中的getopt与getopts-linuxjcq

[复制链接]

尚未签到

发表于 2018-8-17 06:15:45 | 显示全部楼层 |阅读模式
  Shell中的getopt和getopts都用于命令行选项支持
  a. getopts只支持短选项,getopt支持长短选项
  b. getopts是Shell内置,getopt为单独的命令
  一. getopts
  命令格式:
  


  • getopts option_string variable [arg...]
  

  option_string:以冒号为分隔的选项
  variable:将每次匹配成功的选项,保存在给variable
  arg...:选项列表,没有设置是获取命令行参数
  特殊的getopts变量
  OPTIND:初始化为1, 每次getopts处理完一个命令行选项后,OPTIOND就增加为getopts要处理的下一个选项的序号
  OPTARG:包含了对应variable的选项的参数的值
  options-strings开始部分没有冒号:
  会按照系统的定义报错
  a. 指定了非法选项,会报错:scriptname: illegal option -- p
  b. 选项需要参数没有指定,会报错:scriptname: : option requires an argument --
  c. 不论是指定了错误的选项或者指定了带选项的参数没有指定参数,variable都设置为"?",对应的OPTARG为出错的选项
  选项前面有冒号,可以屏蔽这些错误信息,使用自己的反馈信息
  option-strings开始部分有冒号:
  a. 当指定的参数不存在时,variable设置为":",对应的$OPTARG为"对应的选项"
  b. 指定的选项是带参数的而没有提供参数,variable设置为"?",对应的$OPTARG为"这时候的选项"
  可以根据这两个选项指定不同的反馈信息
  单个选项后有冒号:
  这个选项带有参数,参数将会存放在对应的$OPTARG中
  例子:略
  二. getopt
  getopt [options] -o|--options optstring [options] [--] parameters
  选项说明:
  -a:使getopt长参数支持"-"符号打头,必须与-l同时使用
  -l:后面接getopt支持长参数列表
  -n program:如果getopt处理参数返回错误,会指出是谁处理的这个错误,这个在调用多个脚本时,很有用
  -o:后面接短参数列表,这种用法与getopts类似
  -u:不给参数列表加引号,默认是加引号的(不使用-u选项),例如在加不引号的时候 --longoption "arg1 arg2" ,只会取到"arg1",而不是完整的"arg1 arg2"
  有两种使用方法
  a.
  


  • ARGV=($(getopt -o 短选项1[:]短选项2[:]...[:]短选项n -l 长选项1,长选项2,...,长选项n -- "$@"))
  • for((i = 0; i < ${#ARGV[@]}; i++)) {
  •     eval opt=${ARGV[$i]}
  •     case $opt in
  •     -短选项1|--长选项1)
  •        process
  •        ;;
  •     # 带参数
  •     -短选项2|--长选项2)
  •        ((i++));
  •        eval opt=${ARGV[$i]}
  •        ;;
  •     ...

  •     -短选项n|--长选项n)
  •        process
  •        ;;
  •     --)
  •        break
  •        ;;
  •     esac
  • }
  

  b.
  


  • ARGV=($(getopt -o 短选项1[:]短选项2[:]...[:]短选项n -l 长选项1,长选项2,...,长选项n -- &quot;$@&quot;))
  • eval set -- &quot;$ARGV&quot;

  • while true
  • do
  •     case &quot;$1&quot; in
  •     -短选项1|--长选项1)
  •         process
  •         shift
  •         ;;
  •     -短选项2|--长选项2)
  •         # 获取选项
  •         opt = $2
  •         process
  •         shift 2
  •         ;;
  •     ......

  •     -短选项3|--长选项3)
  •         process
  •         ;;
  •     --)
  • break
  • ;;
  • esac
  • }
  

  注意:如果getopt命令本身没有使用-o|--option选项的话,那么--后面的第一个参数被当做短选项(我在这晕了一段时间)



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-552760-1-1.html 上篇帖子: Shell中expr命令 下篇帖子: 解答网友shell问题一例20140702
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表