Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux shell case参数转到默认参数_Linux_Shell_Sh - Fatal编程技术网

Linux shell case参数转到默认参数

Linux shell case参数转到默认参数,linux,shell,sh,Linux,Shell,Sh,我正在编写一个带有选项的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}]} cas

我正在编写一个带有选项的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

我认为我使用了正确的选项。如果您在我的代码中发现错误,请告诉我。谢谢你用8个参数开始了你的脚本。由于这既不是0也不是10,
args[0]
被设置为
-h
,而
$ELEMENTS
被设置为1


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

您用8个参数启动脚本。由于这既不是0也不是10,
args[0]
被设置为
-h
,而
$ELEMENTS
被设置为1


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

您用8个参数启动脚本。由于这既不是0也不是10,
args[0]
被设置为
-h
,而
$ELEMENTS
被设置为1


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

您用8个参数启动脚本。由于这既不是0也不是10,
args[0]
被设置为
-h
,而
$ELEMENTS
被设置为1


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

顺便说一句,不要为您自己的变量使用所有caps名称。请参阅POSIX规范第四段:“包含小写字母的环境变量名称的名称空间是为应用程序保留的。应用程序可以使用此名称空间中的名称定义任何环境变量,而无需修改标准实用程序的行为。”--请记住,shell变量和环境变量共享一个名称空间。为什么要使用
args
?最后,您只需对“$@”中的参数使用
;docase$parameter of…
。我改为大写字母和chepner的解决方案。它起作用了。谢谢顺便说一句,不要为自己的变量使用所有大写名称。请参阅POSIX规范第四段:“包含小写字母的环境变量名称的名称空间是为应用程序保留的。应用程序可以使用此名称空间中的名称定义任何环境变量,而无需修改标准实用程序的行为。”--请记住,shell变量和环境变量共享一个名称空间。为什么要使用
args
?最后,您只需对“$@”中的参数使用
;docase$parameter of…
。我改为大写字母和chepner的解决方案。它起作用了。谢谢顺便说一句,不要为自己的变量使用所有大写名称。请参阅POSIX规范第四段:“包含小写字母的环境变量名称的名称空间是为应用程序保留的。应用程序可以使用此名称空间中的名称定义任何环境变量,而无需修改标准实用程序的行为。”--请记住,shell变量和环境变量共享一个名称空间。为什么要使用
args
?最后,您只需对“$@”中的参数使用
;docase$parameter of…
。我改为大写字母和chepner的解决方案。它起作用了。谢谢顺便说一句,不要为自己的变量使用所有大写名称。请参阅POSIX规范第四段:“包含小写字母的环境变量名称的名称空间是为应用程序保留的。应用程序可以使用此名称空间中的名称定义任何环境变量,而无需修改标准实用程序的行为。”--请记住,shell变量和环境变量共享一个名称空间。为什么要使用
args
?最后,您只需对“$@”中的参数使用
;docase$parameter of…
。我改为大写字母和chepner的解决方案。它起作用了。谢谢
./check_interface.sh -H ip_address -C Comm -T SPEED -i gr-0/0/0