getopts 可选参数_getopts获得选项参数

在写sh脚本的时候,常常需要运行时输入一些数据。之前已经知道用基本的$*,执行的情况,大概就是$0 $1 $2

$3……

那么,那些系统命令里的参数又是怎么做出来的呢?我们自己的脚本如何搞出来$0

-$1的效果呢?这就是getopts的作用了。举例如下:

#!/bin/bash

echo

"OPTIND starts at $OPTIND"

while getopts ":pq:" optname

do

case "$optname" in

"p")

echo "Option $optname is

specified"

;;

"q")

echo "Option $optname has

value $OPTARG"

;;

"?")

echo "Unknown option

$OPTARG"

;;

":")

echo "No argument value for

option $OPTARG"

;;

*)

#

Should not occur

echo "Unknown

error while processing options"

;;

esac

echo "OPTIND is now

$OPTIND"

done

在使用getopts命令的时候,shell会自动产生两个变量OPTIND和OPTARG。

OPTIND初始值为1,其含义是下一个待处理的参数的索引。只要存在,getopts命令返回true,所以一般getopts命令使用while循环;

OPTARG是当getopts获取到其期望的参数后存入的位置。而如果不在其期望内,则$optname被设为?并将该意外值存入OPTARG;如果$optname需要拥有具体设置值而实际却没有,则$optname被设为:并将丢失设置值的optname存入OPTARG;

对于$optname,可以用后标:来表示是否需要值;而前标:则表示是否开启静默模式。

案例分析:

getopts optstring varname [arg

...]

optstring  option字符串,会逐个匹配

varname    每次匹配成功的选项

arg        参数列表,没写时它会取命令行参数列表

$OPTIND    特殊变量,option

index,会逐个递增

$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错误都会使

varname被设成?,$OPTARG是出问题的option。

细则2:当optstring中的字母跟”:“时(比如下面例子中的t),表明该option可接参数,参数(argument)放在$OPTARG中;

如果缺参数,且optstring是以”:“开头,则varname的值会是:,$OPTARG是该option,

否则varname的值是?,$OPTARG是该option。(参照细则1)

简单的sample:#!/bin/bash

SKIPBLANKS=

TMPDIR=/tmp

CASE=lower

while getopts :bt:u arg

do

case $arg in

b) SKIPBLANKS=TRUE

echo "If skip blanks? $SKIPBLANKS"

;;

t) if [ -d "$OPTARG" ]

then

TMPDIR=$OPTARG

echo "Temp dir is $TMPDIR."

else

echo "$0: $OPTARG is not a

directory." >&2

exit 1

fi

;;

u) CASE=upper

echo "Case sensitivity is $CASE."

;;

:) echo "$0: Must supply an argument to -$OPTARG." >&2

exit 1

;;

\?) echo "Invalid option -$OPTARG ignored." >&2

;;

esac

done

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值