由于shell命令行的灵活性,自己编写代码判断时,复杂度会比较高。使用内部命令 getopts 可以很方便地处理命令行参数。一般格式为:

getopts optstring name [args]
       getopts 的设计目标是在循环中运行,每次执行循环,getopts 就检查下一个命令行参数,并判断它是否合法。即检查参数是否以 - 开头,后面跟一个包含在 options 中的字母。如果是,就把匹配的选项字母存在指定的变量 variable 中,并返回退出状态0;如果 - 后面的字母没有包含在 options 中,就在 variable 中存入一个 ?,并返回退出状态0;如果命令行中已经没有参数,或者下一个参数不以 - 开头,就返回不为0的退出状态。

getopts引用的三个环境变量:

OPTARG: 上一个由getopts内置命令处理的选项参数的值, option argument(存放选项参数),当选项需要选项参数时,getopts 命令就将其置于变量 OPTARG 中

OPTIND:  下一个由getopts内置命令处理的参数的序号,option index,每次调用脚本它都会被初始值为1,会逐次递增。

OPTERR: 如果设为1,bash会显示getopts的错误。设为0,不显示getopts的错误。

getopts 的处理过程:
  调用脚本时,OPTIND为初始化为1。每调用一次getopts,就将下一个选项值赋给name , 选项索引值OPTIND也会指向下一个要处理选项的位置,选项参数则会赋给OPTARG
  getopts 的设计目标是在循环中运行,每执行一次,getopts就检查下一个命令行参数,并判断它是否有效。(即检查参数是否以-开头,后面跟一个包含在opstring中的字母)。
  有效,则把匹配的选项字母存在指定的变量variable中,并返回退出状态0(ture);
  无效(如果-后面的字母没有包含在options),就在 variable 中存入一个?,并返回退出状态0;如果命令行中已经没有参数,或者下一个参数不以-开头,就返回不为0的退出状态(false, 可用于结束while 循环)。
 getopts处理完所有参数后,会返回一个非0值(false,退出循环),此时OPTIND索引值指向第一个非选项的参数[args],name置为?

getopts 错误处理
  正确使用命令时,name用来存储option, $OPTARG用来存放option的参数。若命令输入有误(选项无效,缺少参数),getopts会处理illegal option错误和miss option argument错误。处理结果与opstring是否以:开头而不同。opstring 开头的:用于屏蔽getopts处理时的错误消息(脚本中将OPTERR置于0也可以达到同样的效果)。

举个栗子

#!/bin/bash
while getopts u:p:n option
do case "$option" inu)echo "option:u, value $OPTARG"echo "next arg index:$OPTIND";;p)echo "option:p"passwd=$OPTARGecho "next arg index:$OPTIND"echo "PASSWD IS: $passwd";;n)echo "option:N"echo "next arg index:$OPTIND";;\?)echo "Usage: args [-U] [-p] [-n]"echo "-u means uses"echo "-p means passwd"echo "-n means name"exit 1;;esac
done

原文链接:https://www.cnblogs.com/hello-wei/p/9778407.html

转载于:https://www.cnblogs.com/jianzhaojing/p/11451652.html

shell getopts命令相关推荐

  1. bash/shell 解析命令行参数工具:getopts/getopt

    转载自:https://my.oschina.net/leejun2005/blog/202376 bash 脚本中,简单点的参数选项,我们可以直接用位置参数 $1 $2 这样来获取处理了,例如下面这 ...

  2. repo命令添加bin_Linux shell中getopts命令学习--实现一个添加yum源的脚本

    这是本人第一次写博客,之前从一些开源技术网站上看到不少大牛和前辈们的文章,从中学习受益.本着开源界的奉献和学习精神,觉得有必要将自己的学习成果拿出来与大家一起交流分享,既当作是一种自我学习的总结也可能 ...

  3. python getopts_linux bash shell 中getopts 命令 和 python 中 getopt 函数的比较总结

    在 python 中有个获取命令行参数的函数叫 getopt(args, shortopts, longopts=[]) 通常我们使用的时候是如下的形式: import sys import geto ...

  4. shell getopts

    getopts配合case来进行操作时有两个隐含变量:一个是OPTARG,用来取当前选项的值,另外一个是OPTIND,代表当前选项在参数列表中的位移.OPTIND是一个特殊的变量,它的初始值是1,每次 ...

  5. getopts命令行参数处理

    getopts命令行参数处理 一.getopts 简介 由于shell命令行的灵活性,自己编写代码判断时,复杂度会比较高.使用内部命令 getopts 可以很方便地处理命令行参数.一般格式为: get ...

  6. linux shell运行脚本命令行参数,shell脚本命令行参数简介

    之所以用到命令行参数,关键在于shell脚本需要与运行脚本的人员进行交互. bash shell提供了命令行参数添加在命令后面的数据值).命令行选项修改命令行为的单字符值)和直接读取键盘输入. 1.命 ...

  7. 【系统性学习】Linux Shell常用命令

    本文重点是脚本开发时会常用的命令和一些提高效率的高频系统操作命令,其他命令(主要是运维方面的,如网络操作.硬件操作.文件打包等)后续补充. 该文配合[系统性学习]Linux Shell易忘重点整理(会 ...

  8. linux的shell命令行参数,shell脚本命令行参数简介

    之所以用到命令行参数,关键在于shell脚本需要与运行脚本的人员进行交互. bash shell提供了命令行参数添加在命令后面的数据值).命令行选项修改命令行为的单字符值)和直接读取键盘输入. 1.命 ...

  9. 2021年大数据Kafka(三):❤️Kafka的集群搭建以及shell启动命令脚本编写❤️

    全网最详细的大数据Kafka文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 Kafka的集群搭建以及shell启动命令脚本编写 一.搭建 ...

最新文章

  1. jQuery.fly插件实现添加购物车抛物线效果
  2. 关于日期比较compareTo
  3. leetcode 4
  4. OSPF 邻接关系建立
  5. Ralasafe的使用总结
  6. 以后台服务的形式启动nodejs应用
  7. 华为服务器通过mgmt口挂载光盘装系统及Linux系统rescue模式下修复内核
  8. React Native 运行环境安装:0.6以下/以上版本的 新老项目 都适用
  9. Scanner、String(java基础知识十二)
  10. 【无机纳米材料科研制图——OriginLab 0207】Origin拉平XRD基线
  11. Linux是怎么来的?终于有一篇文章讲清楚了
  12. DevOps的技术和工具有哪些?
  13. narwal机器人_NARWAL云鲸智能扫拖机器人,海外Kickstarter众筹销量第一
  14. 在线的MySQL数据库表结构对比工具
  15. zcmu --1919(多重背包)
  16. KNN算法原理与自实现电影分类
  17. u盘正常接入后计算机无法看到,U盘连接电脑看不到盘符怎么办?U盘在电脑上不显示盘符解决方法...
  18. 计算机组成原理白中英第七章,计算机组成原理第七章课件(白中英版).ppt
  19. Java怎样把时间转成毫秒_如何转换时间格式 java如何把时间格式转为毫秒
  20. 关于信息搜集的部分介绍

热门文章

  1. 2021-2027年中国市医疗电子场投资分析及前景预测报告
  2. ttf,woff2字体转化为png图片,python读取图片
  3. Bert代码详解(二)重点
  4. 自动驾驶QNX,Linux,Autosar概述
  5. 物联网安全只有最薄弱的环节才有保障
  6. YOLOV4各个创新功能模块技术分析(一)
  7. composer PHP Fatal error: Allowed memory size of 报错解决
  8. Python:Scrapy的settings
  9. 常用MySQL函数存储过程_解析MySQL存储过程、常用函数代码
  10. xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found b‘b\x14#e\xbc\