我正在尝试检查所有验证是否正确且有效,但我认为我的逻辑不正确,而且我是编码新手。所以我初始化了 p=0 和 un=0,当用户传递两个选项时,它应该会出错。第二次验证用户只能选择一个选项 -p 或 -u 之一,如果用户没有传递任何选项,则进行第三次验证,我知道应该有更多的验证,但我认为我只是不知道。
p=0 # initialize variables
un=0
file=””
while getopts "d:uph" option; do
case $option in
d)
file=$OPTARG
;;
u)
un=1
;;
p)
p=1
;;
h)
help
exit ;;
*) echo "Error: Invalid option"
exit;;
esac
done
#Validations
# This is my first logic validation
if [ "$p" ] || [ "$un" ];then
echo "must provide -u or -p" 1>&2 ;
Help
exit 3 ;
fi
#Second one, i want check make sure they not passing both options
if (( p && u ));then
echo "must not pass two options";
Help
exit 3
答案1
你可以检查一下只有一个选项已通过添加它们的值并检查总和是否为 1(而不是 0 或 2)来提供。
只需一行就可以完成:
test $(( p + un )) -eq 1 || echo "Error: one or the other, not both!"