getopt命令

2022.8.27 星期六

天气逐渐转凉,荆州的妖风又开始捉妖了,我可怜的苗子,太难了。明天计划又去给我的苗子加固,希望它能挺下来。今天和三弟去太湖,电动三轮直接罢工,还好撑到学校门口,勉强推回来了,路上还被路边玫瑰枝给划伤手臂,真的是跌跌撞撞。笑哭。。。最近看书有点看不下去,有可能前面基础有点忘记了,还可能是头疼的缘故吧。但是或多或少都是收获,一步两步都在进步,加油!

今日代码

getopt命令:是一个在处理命令行选项和参数时非常方便的工具。他能识别命令行参数,从而在脚本解析它们时会更加方便。其命令格式如下:

getopt optstring parameters

每个需要加参数的选项需要在选项后加冒号。其工作原理如下:

$ getopt ab:cd -a -b test1 -cd test2 test3
-a -b test1 -c  -d  -- test2 test3
$

和之前的命令一样如果指定了一个不在optstring中的选项,则getopt命令会产生一条错误信息。可以在命令后加-q选项。

$ getopt  -q ab:cd -a -b test1 -cde test2 test3
   -a -b  'test1'  -c  -d  -- 'test2'  'test3'
$

发现加了-q后会多出来单引号。下面介绍在脚本中使用getopt,使用getopt来格式话脚本所携带的任何命令行选项或参数,但是有点小复杂,结合了set命令,set命令能处理shell中的各种变量。用法如下:

set -- $( getopt -q ab:cd "$@")

该方法会将原始脚本的命令行参数传给getopt命令,之后再将getopt命令的输出传给set命令,用getopt格式化后的命令行参数来替换原始的命令行参数

$ cat test.sh
#!/bin/bash
# Extract command line option & values with getopt
#
set -- $( getopt -q ab:cd "$@")
#
echo 
while [ -n "$1" ]
do
    case "$1" in
    -a) echo "Found the -a option" ;;
    -b) param="$2"
         echo "Found the -b option, with parameter value $param"
         shift;;
    -c) echo "Found the -c option" ;;
    --) shift
         break;;
    *)  echo "$1 is not an option";;
    esac
     shift
done
#
count=1
for param in "$@"
do
    echo "Parameter #$count: $param"
    count=$[ $count=1]
done
#

后面运行后就可以看出效果了。

$ ./test.sh -a -b test1 -cd test2 test3 test4

Found the -a option
Found the -b option, with parameter value 'test1'
Found the -c option
Parameter #1: 'test2'
Parameter #2: 'test3'
Parameter #3: 'test4'

但是如果test2与test3用双引号将其二者变成一个参数,则上面代码将会出错,想要解决则需要使用getopts命令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

μμ豆奶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值