python getopts_shell命令行参数解析工具:getopts

shell命令行参数解析工具:getopts

在shell脚本中,对于简单的参数,我们使用$1 $2来处理即可,具体如下:

#!/bin/bash

SOFT_DIR=$1

MAVEN_DIR=$2

echo $SOFT_DIR

echo $MAVEN_DIR

-----------------

$ sh test.sh /home/soft /home/soft/maven

/home/soft

/home/soft/maven

但是,如果你的脚本参数非常多,那使用上面的这种方式就非常不合适,你无法清楚地记得每个位置对应的是什么参数。所以,我们可以使用bash内置的getopts,下面是一个简单的例子:

#!/bin/bash

usage() {

echo "Usage:"

echo " test.sh [-j JAVA_DIR] [-m MAVEN_DIR]"

echo "Description:"

echo " JAVA_DIR, the path of java."

echo " MAVEN_DIR, the path of maven."

exit -1

}

upload="false"

while getopts 'h:j:m:u' OPT; do

case $OPT in

j) JAVA_DIR="$OPTARG";;

m) MAVEN_DIR="$OPTARG";;

u) upload="true";;

h) usage;;

?) usage;;

esac

done

echo $JAVA_DIR

echo $MAVEN_DIR

echo $upload

---------------------------

$ sh test.sh -j /home/soft/java -m /home/soft/maven

/home/soft/java

/home/soft/maven

false

$ sh test.sh -j /home/soft/java -m /home/soft/maven -u

/home/soft/java

/home/soft/maven

true

$ sh test.sh -h

test.sh: option requires an argument -- h

Usage:

test.sh [-j JAVA_DIR] [-m MAVEN_DIR]

Description:

JAVA_DIR, the path of java.

MAVEN_DIR, the path of maven.

getopts后面跟的字符串就是参数列表,每个字母代表一个选项,如果字母后面跟一个:就表示这个选项还会有一个值,比如上面例子中对应的-j /home/soft/java和-m /home/soft/maven。而getopts字符串中没有跟随:的字母就是开关型选项,不需要指定值,等同于true/false,只要带上了这个参数就是true。

getopts识别出各个选项之后,就可以配合case进行操作。操作中,有两个"常量",一个是OPTARG,用来获取当前选项的值;另外一个就是OPTIND,表示当前选项在参数列表中的位移。case的最后一项是?,用来识别非法的选项,进行相应的操作,我们的脚本中输出了帮助信息。

当选项参数识别完成以后,我们就能识别剩余的参数了,我们可以使用shift进行位移,抹去选项参数。

#!/bin/bash

usage() {

echo "Usage:"

echo " test.sh [-j JAVA_DIR] [-m MAVEN_DIR]"

echo "Description:"

echo " JAVA_DIR, the path of java."

echo " MAVEN_DIR, the path of maven."

exit -1

}

upload="false"

echo $OPTIND

while getopts 'j:m:u' OPT; do

case $OPT in

j) JAVA_DIR="$OPTARG";;

m) MAVEN_DIR="$OPTARG";;

u) upload="true";;

h) usage;;

?) usage;;

esac

done

echo $OPTIND

shift $(($OPTIND - 1))

echo $1

---------------

$ sh test.sh -j /home/soft/java -m /home/soft/maven otherargs

1

5

otherargs

sh test.sh -j /home/soft/java -m /home/soft/maven -u otherargs

1

6

otherargs

在上面的脚本中,我们位移的长度等于case循环结束后的OPTIND - 1,OPTIND的初始值为1,当选项参数处理结束后,其指向剩余参数的第一个。getopts在处理参数时,处理带值的选项参数,OPTIND加2;处理开关型变量时,OPTIND则加1。

以上就是对getopts的简单介绍。

原文链接

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值