getopts解析shell脚本命令行参数的方法(shell脚本解析json数组)不看后悔

随心笔谈1年前 (2023)发布 admin
91 0



getopts命令格式

getopts optstring name [arg]

optstring为命令行所有选项组成的字符串,每个字母代表一个选项。如果字母后有冒号:,表明该选项需要选择参数。比如说,执行getopts时,匹配到了-i选项,则将-i相应的参数保存在内置变量OPTARG中。如果字母后无:,表明该选项不要指定值,仅有true/false之分。optstring起始的第一个冒号,则表示执行命令中出现optstring中没有的选项时忽略错误。name为变量。每执行一次getopts,会获取执行命令行中的下一个选项。当执行命令的选项与optstring匹配时,将选项放在name中。否则,name被设置为?。arg是选项和参数组成的列表。可选项,

编写脚本test.sh

#!/bin/bash

while getopts “:i:o:b” i
do
case ${i} in
i) input_dir=”$OPTARG”;;
o) out_dir=”$OPTARG”;;
b) relax=true;;
esac
done

echo $input_dir
echo $out_dir
echo $relax

执行test.sh结果

~/tmp$ bash test.sh -i https://www.jb51.net/article/input/ -o https://www.jb51.net/article/output/ -a -b

https://www.jb51.net/article/input/

https://www.jb51.net/article/output/

true

demo:

#!/bin/bash

func() {
echo “Usage:”
echo “test.sh [-j S_DIR] [-m D_DIR]”
echo “Description:”
echo “S_DIR,the path of source.”
echo “D_DIR,the path of destination.”
exit -1
}

upload=”false”

while getopts ‘h:j:m:u’ OPT; do
case $OPT in
j) S_DIR=”$OPTARG”;;
m) D_DIR=”$OPTARG”;;
u) upload=”true”;;
h) func;;
?) func;;
esac
done

echo $S_DIR
echo $D_DIR
echo $upload

输出

sh test.sh -j /data/web -m /opt/data/web

##输出结果

/data/web

/opt/data/web

false
optstring列出了对应的Shell脚本可以识别的所有参数,例如:需要使用-a,-f,-s参数时,optstring是afs;如果需要命令行参数后面还跟随一个值,则在相应的optstring后面加冒号,例如a:fs 表示a命令行参数后面会有一个值,是**-a value**的形式;getopts执行时若匹配到a参数,会把-a参数对应的value存放在一个叫OPTARG的Shell Variable中;如果optstring是以冒号开头,则表明当命令行出现了optstring中没有的参数将不会提示错误信息

getpots是Shell命令行参数解析工具,旨在从Shell Script的命令行当中解析参数。

getopts optstring name [arg…]

optstring列出了对应的Shell Script可以识别的所有参数。比如:如果 Shell Script可以识别-a,-f以及-s参数,则optstring就是afs;如果对应的参数后面还跟随一个值,则在相应的optstring后面加冒号。比如,a:fs 表示a参数后面会有一个值出现,-a value的形式。

name表示的是参数的名称,每次执行getopts,会从命令行当中获取下一个参数,然后存放到name当中。如果获取到的参数不在optstring当中列出,则name的值被设置为?。

到此这篇关于getopts解析shell脚本命令行参数的文章就介绍到这了,更多相关shell脚本命令行参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:linux?shell?解析命令行参数及while?getopts用法小结Shell脚本中使用getopts处理多命令行选项

© 版权声明

相关文章