while getopts ":a:b:c:" opt
do
    case $opt in
        a)
        echo "参数a的值$OPTARG"
        ;;
        b)
        echo "参数b的值$OPTARG"
        ;;
        c)
        echo "参数c的值$OPTARG"
        ;;
        ?)
        echo "未知参数"
        exit 1;;
    esac
done

输出

bogon:Desktop macname$ ./test.sh -a 1 -b 2 -c 3
参数a的值1
参数b的值2
参数c的值3
bogon:Desktop macname$ ./test.sh -a 1 -b 2
参数a的值1
参数b的值2
bogon:Desktop macname$ ./test.sh -a 1 -c 2
参数a的值1
参数c的值2
bogon:Desktop macname$ ./test.sh -b 1 -c 2 -a 3
参数b的值1
参数c的值2
参数a的值3
bogon:Desktop macname$ ./test.sh -b 1 -c 2 -d 3
参数b的值1
参数c的值2
未知参数
bogon:Desktop macname$ ./test.sh -b 1
参数b的值1
bogon:Desktop macname$ ./test.sh
bogon:Desktop macname$