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
来调试您的脚本(我就是这样做的)。
我正在编写带有选项的 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
来调试您的脚本(我就是这样做的)。