Bash getopts不会显示第二个选项的错误

时间:2017-09-11 14:08:08

标签: bash getopts

我希望脚本有两个选项,两者都是必需的。如果我传入一个,脚本不会打印错误请求您传入第二个。

-bash-4.2$ bash test.sh -b
Invalid option: b requires an argument

-bash-4.2$ bash test.sh -p
Invalid option: p requires an argument

-bash-4.2$ bash test.sh -b sdfsfd

-bash-4.2$ bash test.sh -p sdfsfd

-bash-4.2$ bash test.sh -b sdfsfd -s sfd
Invalid option: s

代码

showHelp()
{
cat << EOF

Find files in client's folder and upload to S3 bucket.

Usage: $(basename $0) [-p PATH_TO_SEARCH] [-b S3 bucket]

OPTIONS:
  -h    Show this help message
  -p    Path to search
  -b    S3 Bucket

EOF
exit 1
}

while getopts ":p:b:h" o; do
    case "${o}" in
        h)
           showHelp
           ;;
        p)
            p=${OPTARG}
            ;;
        b)
            b=${OPTARG}
            ;;
        \? )
            echo "Invalid option: $OPTARG";;
         : )
            echo "Invalid option: ${OPTARG} requires an argument";;
    esac
done
shift $((OPTIND-1))

if [ -z "${p}" ]; then
   showHelp
fi

if [ -z "${b}" ]; then
   showHelp
fi

1 个答案:

答案 0 :(得分:0)

如果您想确保获得两个选项,可以使用以下内容:

no_p=1
no_b=1

while getopts ":p:b:h" o; do
    case "${o}" in
        h)
           showHelp
           ;;
        p)
            p=${OPTARG}
            no_p=0
            ;;
        b)
            b=${OPTARG}
            no_b=0
            ;;
        \? )
            echo "Invalid option: $OPTARG";;
         : )
            echo "Invalid option: ${OPTARG} requires an argument";;
    esac
done

[[ $no_p -eq 1 ]] && echo "No -p provided" && exit 1
[[ $no_b -eq 1 ]] && echo "No -b provided" && exit 1