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

发布时间:2019-11-17 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了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 - 1OPTIND的初始值为1,当选项参数处理结束后,其指向剩余参数的第一个。getopts在处理参数时,处理带值的选项参数,OPTIND加2;处理开关型变量时,OPTIND则加1。

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

原文链接

https://segmentfault.com/a/11...

脚本宝典总结

以上是脚本宝典为你收集整理的shell命令行参数解析工具:getopts全部内容,希望文章能够帮你解决shell命令行参数解析工具:getopts所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。