shell 脚本 getopts 选项验证

shell 脚本 getopts 选项验证

我正在尝试检查所有验证是否正确且有效,但我认为我的逻辑不正确,而且我是编码新手。所以我初始化了 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!"

相关内容