getopts解析shell脚本命令行参数的方法
yayagogogo 人气:0getopts命令格式
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 ./input/ -o ./output/ -a -b
./input/
./output/
true
PS:linux shell 解析命令行参数 | while getopts用法
linux shell 解析命令行参数|getpots
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
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的值被设置为?。
加载全部内容