Shell 脚本调试经验-2

4 篇文章 0 订阅

给sh 脚本传递参数时,需要解析参数,命令后提供的所有的以空格分隔的内容对shell来说都是参数。传入的参数有两种类型 一种是开关参数:只有参数不需要指定参数值;另一种是含值参数:提供指定参数的值。当指定含值参数时,还需要紧随其后指定一个参数作为前面含值参数的值。

 

为了能被getopts识别,提交命令行时,参数名需要 以"-"标记。如果是含值参数则参数值紧随其后以空格分隔且不需要"-"标记。

getopts 每次被调用都获取一个参数,并记录下一个参数的位置。为此有两个内置的变量OPTIND 和OPTARG。OPTIND初始值为1,getopts调用读取参数后,将OPTIND 设置为下一个待处理的参数的位置;OPTARG是当前参数的值,getopts 读取参数时,如果发现参数时数值参数,如果紧邻的下一个参数是没有"-"标识,则把该参数当做前一个参数的值,如果紧邻的这个参数有"-"标识,则将OPTARG置位空。 getopts分析参数时,数值参数后需要用":"标记,开关类型参数不需要。getopts处理数值参数时,会将紧邻的无"-"标识的参数当做数值参数的值,因此在一次getopts调用中分析了两个参数,因此OPTIND的值会被加2.

 

 


echo '$*' $*
echo  '$0='$0 '$1='$1  '$2='$2 '$3='$3 '$4='$4 '$5='$5 '$6='$6 '$7='$7 '$8='$8 '$9='$9 '$10='"${10}" '$11='"${11}" '$12='"${12}" '$13='"${13}" '$14='${14} '$15='${15}

echo OPTIND=$OPTIND
while getopts "a:b:cdef:g" para
do

echo OPTIND=$OPTIND

case $para in
a) echo "[a]OPTIND=$OPTIND OPTARG=$OPTARG"
echo "--------a-----------";;
b) echo "[b]OPTIND=$OPTIND OPTARG=$OPTARG"
echo "--------b-----------";;

c) echo "[c]OPTIND=$OPTIND OPTARG=$OPTARG"
echo "--------c-----------";;

d) echo "[d]OPTIND=$OPTIND OPTARG=$OPTARG"
echo "--------d-----------";;

e) echo "[e]OPTIND=$OPTIND OPTARG=$OPTARG"
echo "--------e-----------";;

f) echo "[f]OPTIND=$OPTIND OPTARG=$OPTARG"
echo "--------f-----------";;

g) echo "[g]OPTIND=$OPTIND OPTARG=$OPTARG"
echo "--------g-----------";;
esac
done

shift 1
echo $*
shift 1
echo $*
shift 1
echo $*
shift 1
echo $*

echo  '$0='$0 '$1='$1  '$2='$2 '$3='$3 '$4='$4 '$5='$5 '$6='$6 '$7='$7 '$8='$8 '$9='$9 '$10='"${10}" '$11='"${11}" '$12='"${12}" '$13='"${13}" '$14='${14} '$15='${15}

 

下面是脚本测试输出:

csp12au():/home/scnzqz $> ./test.sh -a aaa -b bbb -c -d -e -f  fff -g
$* -a aaa -b bbb -c -d -e -f fff -g
$0=./test.sh $1=-a $2=aaa $3=-b $4=bbb $5=-c $6=-d $7=-e $8=-f $9=fff $10=-g $11= $12= $13= $14= $15=
OPTIND=1
OPTIND=3
[a]OPTIND=3 OPTARG=aaa
--------a-----------
OPTIND=5
[b]OPTIND=5 OPTARG=bbb
--------b-----------
OPTIND=6
[c]OPTIND=6 OPTARG=
--------c-----------
OPTIND=7
[d]OPTIND=7 OPTARG=
--------d-----------
OPTIND=8
[e]OPTIND=8 OPTARG=
--------e-----------
OPTIND=10
[f]OPTIND=10 OPTARG=fff
--------f-----------
OPTIND=11
[g]OPTIND=11 OPTARG=
--------g-----------
aaa -b bbb -c -d -e -f fff -g
-b bbb -c -d -e -f fff -g
bbb -c -d -e -f fff -g
-c -d -e -f fff -g
$0=./test.sh $1=-c $2=-d $3=-e $4=-f $5=fff $6=-g $7= $8= $9= $10= $11= $12= $13= $14= $15=
 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值