当为以下程序编写bash脚本时,我很困惑如何包括可选参数/标志:
该程序需要两个参数:
run_program --flag1 <value> --flag2 <value>
但是,有几个可选标志:
run_program --flag1 <value> --flag2 <value> --optflag1 <value> --optflag2 <value> --optflag3 <value> --optflag4 <value> --optflag5 <value>
我想运行bash脚本,使其接受用户参数。如果用户仅按顺序输入两个参数,则为:
#!/bin/sh
run_program --flag1 $1 --flag2 $2
但是,如果包含任何可选参数怎么办?我认为那是
if [ --optflag1 "$3" ]; then
run_program --flag1 $1 --flag2 $2 --optflag1 $3
fi
但是,如果给出4美元而不给出3美元怎么办?
getopts
,我需要指定每个参数组合吗?3&4,3&5,3&4&5,等等?
getopts
。假设我强迫用户使用所有参数运行脚本:run_program.sh VAL VAL FALSE FALSE FALSE FALSE FALSE
该程序以形式运行program --flag1 VAL --flag2 VAL
。如果您运行run_program.sh VAL VAL FALSE 10 FALSE FALSE FALSE
,该程序将以方式运行program --flag1 VAL --flag2 VAL --optflag2 10
。您如何获得这种行为getopts
?
getopts
是你想要的。否则,您可以使用带有switch语句的循环来检测每个标志(可选与否)。