shell 个案例参数变为默认参数

shell case arguments go to the default one

我正在编写带有选项的 shell 脚本。我不明白为什么我的脚本直接转到默认选项。

这里是脚本;

args=("$@")
ELEMENTS=${#args[@]}

LENGTH=$#


if [ $LENGTH -eq 0 ] || [ $LENGTH -ne 10 ]
then
    args[0]="-h"
    ELEMENTS=1
fi

for ((i=0; i<$ELEMENTS; i++ ))
do

    PARAMETER=${args[${i}]}

    case $PARAMETER in

    -H)
        i=$(( i + 1 ))
        HOSTNAME="${args[${i}]}"
        ;;

    -C)
        i=$(( i + 1 ))
        COMMUNITY="${args[${i}]}"
        ;;

    -T)

        i=$(( i + 1 ))
        TYPE="${args[${i}]}"
        ;;

    -i)
        i=$(( i + 1 ))
        INTERFACE="${args[${i}]}"
        ;;

    -h|--help|*)
            echo "Usage:

./check_CMT.sh -H <HOSTNAME> [-C <COMMUNITY>] -T <TYPE> -i <INTERFACE>

            TYPE:

            1. INTER -- gr-0/0/0
            2. SPEED
            3. ERROR
            4. DISCARD
            5. STATUS
            6. TRAFIC

-h |  --help --> For help"

            exit
            ;;
    esac
done

当我执行脚本时,我直接得到了最后一个回声。

./check_interface.sh -H ip_address -C Comm -T SPEED -i gr-0/0/0

我认为我使用了正确的选项。如果您在我的代码中发现错误,请告诉我。谢谢

您使用 8 个参数启动了脚本。由于它既不是 0 也不是 10,因此 args[0] 设置为 -h$ELEMENTS 设置为 1。

您可以使用 set -xv 来调试您的脚本(我就是这样做的)。