当你进入shell编程时,我确信这是一个明智的选择。 不幸的是我不是,而且我很难过......
我需要验证传递给shell脚本的参数。 我还想存储在数组中传递的所有参数,因为我稍后需要进一步分离。
我有一个参数“-o”,必须后跟0或1。 因此,我想检查以下参数是否有效。 这是我试过的:
# Loop over all arguments
for i in "$@"
do
# Check if there is a "-" as first character,
# if so: it's a parameter
str="$i"
minus=${str:0:1}
# Special case: -o is followed by 0 or 1
# this parameter needs to be added, too
if [ "$str" == "-o" ]
then
newIdx=`echo $((i+1))` # <-- problem here: how can I access the script param by a generated index?
par="$($newIdx)"
if [[ "$par" != "0" || "$par" != "1" ]]
then
echo "script error: The -o parameter needs to be followed by 0 or 1"
exit -1
fi
paramIndex=$((paramIndex+1))
elif [ "$minus" == "-" ]
then
myArray[$paramIndex]="$i"
paramIndex=$((paramIndex+1))
fi
done
我尝试了各种各样的东西,但它不起作用...... 如果有人能够阐明这一点,将不胜感激!
由于
答案 0 :(得分:5)
在bash
中,您可以使用间接参数扩展来访问任意位置参数。
$ set a b c
$ paramIndex=2
$ echo $2
b
$ echo ${!paramIndex}
b
答案 1 :(得分:1)
没有方法可以访问for
中的下一个参数。
如何重写脚本以使用 getopt?
如果您不喜欢getopt,请尝试使用shift
重写您的脚本:
while [ -n "$1" ]
do
str="$1"
minus=${str:0:1}
if [ "$str" == "-o" ]
then
shift
par="$1"
# ...
elif [ "$minus" == "-" ]
then
# append element into array
myArray[${#myArray[@]}]="$str"
fi
shift
done