我目前的脚本出现问题。基本上,我想要发生的是当我执行./apache_new_vhost.sh -a -d google.com
时,它将创建一个文件和目录,如果我使用-r选项,它应该删除。
该脚本能够使用add_vhost之类的功能。它可以创建配置和文件夹,但文件名为空,因为它无法读取我传递给$domain
的值。
while getopts ":a:r:d:h" opt; do
case $opt in
a) action=add_vhost
;;
r) action=remove_vhost
;;
d) domain=$OPTARG
;;
h) usage
exit 1
;;
\?) echo "Invalid option: -$OPTARG"
usage
exit 1
;;
:) echo "Error: option -$OPTARG requires an argument."
usage
exit 1
;;
esac
done
#if [ -z $domain ]; then
# usage
# exit 1
if [ $action == "add_vhost" ]; then
echo $action $domain
elif [ $action == "remove_vhost" ]; then
echo $action $domain
fi
答案 0 :(得分:1)
按照您在命令行中指定的顺序处理选项。因此,在您的示例中,首先处理case a)
,然后立即调用add_vhost
函数。
但d)
案例尚未处理,因此您尚未设置domain
。
您需要稍微改变一下逻辑。不是直接从case语句中调用函数,而是保存选择的操作。即:
a) action="add_vhost"
;;
然后在案例之后,检查您是否选择了action
,并调用该功能。
答案 1 :(得分:0)
根据您的脚本,您希望在选项-a
之后进行参数化。所以当您通过
./apache_new_vhost.sh -a -d google.com
然后-d
将考虑作为-a
选项的参数。所以你的第二个参数被丢弃了。要解决它,只需在-a
之后给出任何参数(例如./apache_new_vhost.sh -a 1 -d google.com)选项或在getopt
while getopts ":ar:d:h" opt; do