我有一个脚本,其中接受以下参数: ./script [-dph] [-peh] 第一个参数告诉脚本我是否需要使用生产脚本或开发脚本来执行它。第二个参数告诉脚本生成的报告的输出是应该作为电子邮件发送还是应该重定向到html页面。
当我使用getopts时,我可以选择使用一个选项。
while getopts "dph" opt_name
do
case "$opt_name" in
h)
helpText
exit 1
;;
d)
#Use Dev env
;;
p)
#Use Prod env
;;
*)
echo "Wrong command line argument. Exiting...";
exit 1
;;
esac
done
我如何使用两个选项来实现它,其中第二个参数表示基于第一个参数的不同操作?
PS:请注意我知道有dev和prod env的选项并不是最好的解决方案,但是我的应用程序处于概念验证阶段,因此,我正在使用我所知道的构建它。答案 0 :(得分:2)
这可能不是最优雅的解决方案,我很乐意找到更好的方法,但它有效,它的作用很明确。
在getopts部分中,您解析命令行选项并将它们分配给变量。在第二部分中,您可以控制cli选项依赖项,并且可以直接在控制结构中执行操作。
#!/bin/bash
while getopts "DPehp" opt_name
do
case "$opt_name" in
h)
helpText
exit 1
;;
D)
#Use Dev env
dev=true
;;
P)
#Use Prod env
prod=true
;;
p)
p=true
;;
e)
e=true
;;
*)
echo "Wrong command line argument. Exiting...";
exit 1
;;
esac
done
if [[ $dev == true && $prod == true ]] || [[ $dev != true && $prod != true ]]
then
echo "You must choose between development (-D) or production (-P) scripts"
exit
fi
if [[ $dev == true ]]
then
if [[ $p == true ]]
then
echo "Your 'p' dev action goes here"
fi
if [[ $e == true ]]
then
echo "Your 'e' dev action goes here"
fi
elif [[ $prod == true ]]
then
if [[ $p == true ]]
then
echo "Your 'p' prod action goes here"
fi
# and so on fi
fi
答案 1 :(得分:0)
简单解决方案:为开发/生产标志使用不同的字母(例如,大写D和P)。
复杂解决方案:在p)
下,检查环境是否已经确定。如果是这样,请使用第二个含义。如果没有,请将环境设置为生产。