shell脚本中getopt介绍
创始人
2024-03-13 15:58:52
0

  介绍

        使用过linux命令的都用过xxx -a --append  -f a.tar.gz  /etc/temp这种类型的命令

上面的命令包含了短选项、长选项、参数、选项参数

例如"-a"是短选项,"--append"是长选项,a.tar.gz是选项“-f”的选项参数(传递给选项的参数),/etc/temp则只是参数,为非选项参数

bash的getopt命令经常用在shell脚本内部或函数内部,用来解析脚本执行或函数执行时传递的选项、参数

getopt -o SHORT_OPTIONS -l LONG_OPTIONS -n "$0" -- "$@"

-o SHORT_OPTIONS 或 --options SHORT_OPTIONS

getopt通过“-o”收集传递的短选项和它们对应的参数

-l LONG_OPTIONS或--longoptions LONG_OPTIONS或--long LONG_OPTIONS

同上,长选项用-l或者后面2个

-n NAME

getopt在解析命令行时,如果解析出错则执行NAME脚本

-- "$@"

其中--表示getopt命令自身的选项到此结束,后面的元素都是要被getopt解析的命令行参数,"$@"表示所有命令行参数

 

 getopt解析短选项时:

多个短选项开易连接在一起

如果某个短选项需要一个参数,则在选项后面跟一个冒号

如果某个短选项参数可选,则跟两个冒号

例如:getopt -o ab:c::,解析为:-a -b arg_b -c [arg_c] ,arg_b是"-b"选项必须的,arg_c是"-c"选项可选的,-a无须参数

getopt解析长选项时:

可以一次性指定多个选项名称,但是用逗号分开

可以多次使用-l选项,多次解析长选项

如果某个短选项需要一个参数,则在选项后面跟一个冒号

如果某个短选项参数可选,则跟两个冒号

例如:getopt -l add:,remove::,show,其实和上面的短选项类似,不做说明

getopt解析后处理

ARGS=`getopt -o hc:p:: --long help,case: -n 'run.sh' -- "$@"`
eval set -- "${ARGS}" #将规范化后的命令行参数分配至位置参数($1,$2,...)while [ -n "$1" ]
docase "$1" in  #循环解析第一个参数-h|--help)test_run_help;;-c|--case)case="$2"shift;;-p)case "$2" in"") echo "Option p, no argument"; shift ;;*)  echo "Option p, argument \`$2'" ; shift ;;esac ;;--)shift ;break;;*)breakesacshift
done

./test.sh -c aa -pvv

Option p, argument `vv'

 上面的命令中用到了eval、set和shift

eval

对其后面的命令再次进行shell解析

#:cat file

hello world

#:test = "cat file"

#:echo $test

cat file

#:eval $test  #这里相当于二次解析了,执行了cat file命令

hello world

set --

根据分隔符依次把值赋给$1 $2 $3... ...

# cat test.sh 
#!/bin/bash
echo $1 $2 $3
set -- aa bb cc  #这里就被替换成了aa bb cc
echo $1 $2 $3  
# sh test.sh a b c
a b c
aa bb cc

 shift

将参数左移n个,可以理解成为删除前n个参数,即$1、$2。。。。。

# cat test.sh 
#!/bin/bash
set -- aa bb cc
echo $1 $2 $3
shift 1 #这里删除$1,参数只剩bb cc
echo $1 $2 $3 
# sh test.sh 
aa bb cc
bb cc

相关内容

热门资讯

最高检:立足检察公益诉讼职能定... 12月25日,全总召开2025年劳动法律监督“一函两书”典型案例新闻发布会。会上,最高人民检察院公益...
筑牢低空安全根基:无人机法规教... 低空经济作为国家战略性新兴产业,正以技术创新为引擎、应用场景为载体,加快重塑航空产业格局,成为推动经...
规范幼儿园收费 确保普惠政策精... 近日,国家发展改革委、教育部、财政部联合印发《关于完善幼儿园收费政策的通知》,明确幼儿园可收取保育教...
三部门发文:完善幼儿园收费政策 12月23日,由国家发展改革委、教育部、财政部联合印发的《关于完善幼儿园收费政策的通知》(以下简称《...
三部门联合发布2025年劳动法... 中新网12月25日电 据最高人民检察院微信公众号25日消息,中华全国总工会、最高人民法院、最高人民检...
金融领域“黑灰产”违法犯罪集群... 海报新闻记者 孙佃潇 北京报道 12月25日,公安部召开新闻发布会,会上通报公安部和国家金融监督管理...
最高法、全国妇联、司法部联合发... 人民网北京12月25日电 (薄晨棣、高清扬)据最高人民法院消息,24日,最高法与全国妇联、司法部联合...
200余个金融领域犯罪团伙被警... 文 | CFN 大河 图 | 微摄 2025年12月25日,公安部在京召开专题新闻发布会,通报了一场...
锐评丨套牌电动车,闯了法律红灯 一辆在昌平被烧毁的电动车,却在朝阳出现交通违法记录;车牌早已注销,仍收到交通违法提示短信;人在国外度...