使用getopt命令解析shell脚本的命令行选项
2016-08-18 20:26
716 查看
在之前的一篇文章中,介绍了如何利用shell内置的getopts命令来帮助我们处理shell脚本选项和参数,其缺点是只能处理短选项,无法处理长选项。下面,本文将要介绍的是getopt命令,它可以同时处理短选项和长选项。
首先,getopt命令不是一个标准的unix命令,但它在大多数Linux的发行版中都自带了有,如果没有,也可以从getopt官网上下载安装。
在getopt的较老版本中,存在一些bug,不大好用,在后来的版本中解决了这些问题,我们称之为getopt增强版。通过-T选项,我们可以检查当前的getopt是否为增强版,返回值为4,则表明是增强版的。
getopt命令与getopts命令不同,它实际上是通过将参数规范化来帮助我们处理的。具体的用法,如下面的脚本:
需要注意的是,像上面的-c选项,后面是可接可不接参数的,如果需要传递参数给-c选项,则必须使用如下的方式:
首先,getopt命令不是一个标准的unix命令,但它在大多数Linux的发行版中都自带了有,如果没有,也可以从getopt官网上下载安装。
在getopt的较老版本中,存在一些bug,不大好用,在后来的版本中解决了这些问题,我们称之为getopt增强版。通过-T选项,我们可以检查当前的getopt是否为增强版,返回值为4,则表明是增强版的。
#getopt -T #echo $? 4 #getopt -V getopt (enhanced) 1.1.4
getopt命令与getopts命令不同,它实际上是通过将参数规范化来帮助我们处理的。具体的用法,如下面的脚本:
#!/bin/bash #echo $@ #-o或--options选项后面接可接受的短选项,如ab:c::,表示可接受的短选项为-a -b -c,其中-a选项不接参数,-b选项后必须接参数,-c选项的参数为可选的 #-l或--long选项后面接可接受的长选项,用逗号分开,冒号的意义同短选项。 #-n选项后接选项解析错误时提示的脚本名字 ARGS=`getopt -o ab:c:: --long along,blong:,clong:: -n 'example.sh' -- "$@"` if [ $? != 0 ]; then echo "Terminating..." exit 1 fi #echo $ARGS #将规范化后的命令行参数分配至位置参数($1,$2,...) eval set -- "${ARGS}" while true do case "$1" in -a|--along) echo "Option a"; shift ;; -b|--blong) echo "Option b, argument $2"; shift 2 ;; -c|--clong) case "$2" in "") echo "Option c, no argument"; shift 2 ;; *) echo "Option c, argument $2"; shift 2; ;; esac ;; --) shift break ;; *) echo "Internal error!" exit 1 ;; esac done #处理剩余的参数 for arg in $@ do echo "processing $arg" done
需要注意的是,像上面的-c选项,后面是可接可不接参数的,如果需要传递参数给-c选项,则必须使用如下的方式:
#./getopt.sh -b 123 -a -c456 file1 file2 Option b, argument 123 Option a Option c, argument 456 processing file1 processing file2 #./getopt.sh --blong 123 -a --clong=456 file1 file2 Option b, argument 123 Option a Option c, argument 456 processing file1 processing file2
相关文章推荐
- 使用getopt命令解析shell脚本的命令行选项
- 使用getopt命令解析shell脚本的命令行选项
- 使用getopt命令解析shell脚本的命令行选项 【转】
- 使用getopts命令解析shell脚本的命令行选项
- getopt命令--用于shell脚本获取命令行选项
- Shell编程中的用户输入处理(4):在shell脚本中,使用read命令获取命令行输入
- 命令行程序选项解析函数—getopt
- 使用getopt_long解析程序长选项参数
- Shell脚本中cd命令使用
- 使用getopt模块处理命令行选项
- GNU长选项命令行解析getopt_long()
- linux解析命令行选项getopt_long用法解读
- Linux命令选项及参数解析 getopt() getopt_long() 函数
- SHELL脚本的基础知识2——使用结构化命令
- 如何方便的使用shell脚本来解析xml文件
- shell脚本执行命令 . 和sh 和 source 和 ./ 的使用以及区别
- linux-解析命令行选项getopt_long用法
- 使用getopt_long解析程序长选项参数
- C程序获取shell脚本命令输出,使用popen()函数
- 脚本shell中的tr 命令使用与实例