在shell脚本中循环遍历参数数组,而不知道有多少参数?

时间:2010-07-01 07:55:29

标签: arrays shell loops arguments

我想将许多参数传递给shell脚本,我不知道它们将会有多少参数,我想处理它们。我做了以下代码:

int=$1
src=$2

r=$3
string=$4

duration=$5

./start.sh $int $r $src "$string"
sleep $duration

shift; shift; shift; shift; shift

while [ $# -gt 2 ]
do
  r=$1
  string=$2
  duration=$3
  ./change.sh $int $r "$string"
  sleep $duration
  shift; shift; shift
done

这有效但只有一次,现在我希望这个脚本一直运行,我的意思是使用while 1,但这不会这样,因为参数列表在该代码的末尾是空的!

有没有办法在shell脚本中执行以下“伪代码”:

for( i=0 ; i<arguments.count; i++ ){
   //do something with arguments[i]
}

或将arguments数组复制到另一个数组中,以便我可以按照我想要的方式使用它。 我的意思是我可以将$*$@arg复制到另一个数组中吗?

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

参数的数量存储在参数#中,可以使用$#进行访问。

所有参数的简单循环可以写成如下:

for arg
do
    # do something with the argument "arg"
done

答案 1 :(得分:0)

您可以使用$#获取传递给脚本的参数数量,或使用$@获取整个参数列表。

答案 2 :(得分:0)

declare -a array_list
index=0
for arg
do
   array_list[$index]=$arg
   echo ${array_list[$index]} #just to make sure it is copied :)
   ((index++))
done

现在我正在使用 array_list 为参数列表做任何我想做的事情。 感谢