Shell脚本中getopt如何使用

壳脚本中getopt如何使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

<强> 1。getops

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

(1)语法格式:getopt(选择[:]][DESCPRITION]变量

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

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

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

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

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

<李>

OPTARG就是将选项后面的参数(或者描述信息DESCPRITION)保存在这个变量当中。

<李>

OPTIND:这个表示命令行的下一个选项或参数的索引(文件名不算选项或参数)

初次使用要注意这几点:

<李>

脚本位置参数会与optstring中的单个字母逐个匹配,如果匹配到就赋值给名字,否则赋值名称为问号;

<李>

optstring中单个字母是一个选项,如果字母后面加冒号,表示该选项后面带参数,参数值并会赋值给OPTARG变量;

<李>

optstring中第一个是冒号,表示屏蔽系统错误(测试。承宪:非法选项——h);

<李>

允许把选项放一起,例如ab

<强> 2。实验

(1) getops参数简单使用

#!/bin/bash while getopts ':b:d:' OPT &> /dev/null;do  case $OPT in  b)  echo "The options is b"  echo $OPTARG ;;  d)  echo "The options is d"  echo $OPTARG ;;  *)  echo "Wrong Options"  exit 7 ;;  esac # echo $OPT # echo $OPTARG done echo $OPTIND shift $[$OPTIND-1] echo $1

Shell脚本中getopts如何使用

执行结果:

./getopts1.sh -d 'nice' fixnale

Shell脚本中getopts如何使用

说明:

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

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

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

(2) getops参数进一步使用

#!/bin/bash echo $* while getopts ":a:bc:" opt do  case $opt in  a)  echo $OPTARG $OPTIND;;  b)  echo "b $OPTIND";;  c)  echo "c $OPTIND";;  ?)  echo "error"  exit 1;;  esac done echo $OPTIND shift $(( $OPTIND-1 )) echo $0 echo $*

Shell脚本中getopts如何使用

执行结果:

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

Shell脚本中getopts如何使用

说明:

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

<李>

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,选项——的参数为11日,下一个要处理的选项- b位置为3,所以输出:11 3;

<李>

第三行,然后- b要处理的下一个选项- c位置为4,所以输出:b 4;

Shell脚本中getopt如何使用