详解Shell脚本中关于getopts的使用方法

今天主要介绍一下怎么用getopts工具完善脚本命令行参数。

详解Shell脚本中关于getopts的使用方法

1. getops

getopts是一个解析脚本选项参数的工具。

(1) 语法格式:getopts [option[:]] [DESCPRITION] VARIABLE

(2) option:表示为某个脚本可以使用的选项.

(3) “:”:如果某个选项(option)后面出现了冒号(“:”),则表示这个选项后面可以接参数(即一段描述信息DESCPRITION)

(4) VARIABLE:表示将某个选项保存在变量VARIABLE中

getopts是linux系统中的一个内置变量,一般用在循环中。每当执行循环是,getopts都会检查下一个命令选项,如果这些选项出现在option中,则表示是合法选项,否则不是合法选项。并将这些合法选项保存在VARIABLE这个变量中。

getopts还包含两个内置变量,及OPTARG和OPTIND:

  • OPTARG就是将选项后面的参数(或者描述信息DESCPRITION)保存在这个变量当中。
  • OPTIND:这个表示命令行的下一个选项或参数的索引(文件名不算选项或参数)

初次使用要注意这几点:

  • 脚本位置参数会与optstring中的单个字母逐个匹配,如果匹配到就赋值给name,否则赋值name为问号;
  • optstring中单个字母是一个选项,如果字母后面加冒号,表示该选项后面带参数,参数值并会赋值给OPTARG变量;
  • optstring中第一个是冒号,表示屏蔽系统错误(test.sh: illegal option — h);
  • 允许把选项放一起,例如-ab

2. 实验

(1) getops参数简单使用

  1. #!/bin/bash
  2. while getopts ‘:b:d:’ OPT &> /dev/null;do
  3.  case $OPT in
  4.  b)
  5.  echo “The options is b”
  6.  echo $OPTARG ;;
  7.  d)
  8.  echo “The options is d”
  9.  echo $OPTARG ;;
  10.  *)
  11.  echo “Wrong Options”
  12.  exit 7 ;;
  13.  esac
  14. # echo $OPT
  15. # echo $OPTARG
  16. done
  17. echo $OPTIND
  18. shift $[$OPTIND-1]
  19. echo $1

详解shell脚本中关于getopts的使用方法

执行结果:

  1. ./getopts1.sh -d ‘nice’ fixnale

详解shell脚本中关于getopts的使用方法

说明:

当输入-d时,$OPT=d,$OPTARG=’nice’,因此就会显示d)…这一部分的信息。

由于这里有一个选项(-d)和一个参数(‘nice’),$OPTIND指向命令行中下一个选项或参数的索引位置,因此这里即为3。

shift $[$OPTIND-1]表示将文件名前面的选项和参数踢掉.

(2) getops参数进一步使用

  1. #!/bin/bash
  2. echo $*
  3. while getopts “:a:bc:” opt
  4. do
  5.  case $opt in
  6.  a)
  7.  echo $OPTARG $OPTIND;;
  8.  b)
  9.  echo “b $OPTIND”;;
  10.  c)
  11.  echo “c $OPTIND”;;
  12.  ?)
  13.  echo “error”
  14.  exit 1;;
  15.  esac
  16. done
  17. echo $OPTIND
  18. shift $(( $OPTIND-1 ))
  19. echo $0
  20. echo $*

详解shell脚本中关于getopts的使用方法

执行结果:

  1. ./getopts2.sh -a 11 -b -c 6

详解shell脚本中关于getopts的使用方法

说明:

while getopts “:a:bc:” opt #第一个冒号表示忽略错误;字符后面的冒号表示该选项必须有自己的参数。

  • $optarg 存储相应选项的参数,如上例中的11、6;
  • $optind 总是存储原始$*中下一个要处理的选项(不是参数,而是选项,此处指的是a,b,c这三个选项,而不是那些数字,当然数字也是会占有位置的)位置。

optind初值为1,遇到”x”,选项不带参数,optind+=1;遇到”x:”,带参数的选项,optarg=argv[optind+1],optind+=2;遇到”x::”,可选参数,属于#1和#2之一。

  • 第一行输出echo $*
  • 第二行,optind初值为1,选项-a的参数为11,下一个要处理的选项-b位置为3,所以输出:11 3;
  • 第三行,然后-b要处理的下一个选项-c位置为4,所以输出:b 4;
  • 第四行,再者-c有参数,所以下一个要处理的位置+2,所以输出:c 6;

 

极牛网精选文章《详解Shell脚本中关于getopts的使用方法》文中所述为作者独立观点,不代表极牛网立场。如若转载请注明出处:https://geeknb.com/6629.html

(34)
打赏 微信公众号 微信公众号 微信小程序 微信小程序
主编的头像主编认证作者
上一篇 2019年11月7日 下午9:21
下一篇 2019年11月8日 上午8:53

相关推荐

发表回复

登录后才能评论
扫码关注
扫码关注
分享本页
返回顶部