【发布时间】:2015-11-07 22:48:18
【问题描述】:
所以我的 bash 脚本中有几个 getopts。这是一个工作示例。
FOUND=
SEARCH=
COUNT=0
while getopts "ips:flenkc" OPTION
do
case $OPTION in
i)
FOUND=1
let "COUNT++"
;;
p)
FOUND=2
let "COUNT++"
;;
s)
FOUND=3
SEARCH=$OPTARG
let "COUNT++"
;;
esac
done
稍后在 case 语句中检查是否 count=1(意思是,在调用中仅使用以下 i、p 和 s 之一)除了它确定正在执行的主要操作之外,这并不重要。
现在有问题的 getopts 事情。这以前有效,现在不行了。我们的目标是,如果有人想输入数据,他们可以使用以下 bash 命令来完成。
./programname -i -f Mary -l Sue -e smary@email.com -n 555-555-5555
当使用 -i 时,我们必须有 -f、-l、-e 和 -n(代表名字、姓氏、电子邮件和号码)。 我使用的代码:警告,代码中充满了语法错误。如果您正在学习 bash,我强烈建议您不要使用您在我的帖子中看到的任何内容。
if [ $FOUND == "1" ]
then
echo "You have chosen to insert things."
FIRST=
LAST=
EMAIL=
NUMBER=
while getopts "if:l:e:n:" OPTION
do
case $OPTION in
f)
FIRST=$OPTARG
;;
l)
LAST=$OPTARG
;;
e)
EMAIL=$OPTARG
;;
n)
NUMBER=$OPTARG
;;
esac
done
if [[ -z $FIRST ]] || [[ -z $LAST ]] || [[ -z $EMAIL ]] || [[ -z $NUMBER ]]
echo "Error!!! Some input is missing!!!"
usage // display usage
exit 1
fi
echo -e $FIRST"\t"$LAST"\t"$EMAIL"\t"$NUMBER >> contacts
fi
在这个程序可以工作之前,但现在,甚至没有任何东西可以输入 FIRST、LAST、EMAIL 和 NUMBER(在我尝试更改代码以查看它是否正在执行某些步骤时) .
我在 getopts 上做错了什么?以前可以正常工作,但现在....根本不工作!
【问题讨论】: