博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell命令行参数解析工具:getopts
阅读量:7069 次
发布时间:2019-06-28

本文共 2255 字,大约阅读时间需要 7 分钟。

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

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

#!/bin/bashSOFT_DIR=$1MAVEN_DIR=$2echo $SOFT_DIRecho $MAVEN_DIR-----------------$ sh test.sh /home/soft /home/soft/maven/home/soft/home/soft/maven

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

#!/bin/bashusage() {    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;;    esacdoneecho $JAVA_DIRecho $MAVEN_DIRecho $upload---------------------------$ sh test.sh -j /home/soft/java -m /home/soft/maven/home/soft/java/home/soft/mavenfalse$ sh test.sh -j /home/soft/java -m /home/soft/maven -u/home/soft/java/home/soft/maventrue$ sh test.sh -h   test.sh: option requires an argument -- hUsage:  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/bashusage() {    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 $OPTINDwhile getopts 'j:m:u' OPT; do    case $OPT in        j) JAVA_DIR="$OPTARG";;        m) MAVEN_DIR="$OPTARG";;        u) upload="true";;        h) usage;;        ?) usage;;    esacdoneecho $OPTINDshift $(($OPTIND - 1))echo $1---------------$ sh test.sh -j /home/soft/java -m /home/soft/maven otherargs15otherargssh test.sh -j /home/soft/java -m /home/soft/maven -u otherargs16otherargs

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

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

原文链接

转载地址:http://szell.baihongyu.com/

你可能感兴趣的文章
复杂 Listview 显示 多个样式
查看>>
[Unity3D]Unity3D游戏开发之角色控制漫谈
查看>>
git branch merge到master
查看>>
EJB--事务管理 .
查看>>
在vmware里面免费安装纯净的xp虚拟机
查看>>
什么是RESTfull?理解RESTfull架构【转】
查看>>
linux lsof命令详解
查看>>
MySQL中concat函数
查看>>
代理模式
查看>>
Linux命令 cat命令
查看>>
poj1007 逆序数 排序
查看>>
周末轻松话卷积(上)
查看>>
【转】对C# 中堆栈,堆,值类型,引用类型的理解
查看>>
perl脚本调用
查看>>
gcc 0长数组学习
查看>>
经方时方接轨之――茵陈蒿汤合甘露饮
查看>>
MATLAB中取整函数(fix, floor, ceil, round)的使用
查看>>
10Mybatis_mybatis和hibernate本质区别和应用场景
查看>>
C语言 线性表 顺序表结构 实现
查看>>
SQLLoader7(只导入数据文件的其中几行记录)
查看>>