shell脚本中的循环

时间:2013-07-09 19:12:52

标签: arrays shell unix loops

我有两组数据,比如a=file1 file2 file3b=location1 location2 location3。 现在我需要循环并将file1复制到location1,将file2复制到location2,将file3复制到location3

如果我使用for循环,那么在内循环的第一次迭代之后,它应该返回到外循环,取第二个值,转到内循环并取第二个值,依此类推。基本上,内部循环不应该迭代外部循环中的每个值。

有办法做到这一点吗?

提前致谢。 的Sudhir

3 个答案:

答案 0 :(得分:1)

听起来你变得太复杂了:

a=(file1 file2 file3)
b=(location1 location2 location3)

for (( idx=0; idx<${#a[@]}; idx++ )); do
    cp -v "${a[idx]}" "${b[idx]}"
done

答案 1 :(得分:1)

您可以创建bash数组并让它适合您:

declare -a f=( "file1" "file2" "file3" )
declare -a d=( "location1" "location2" "location3" )
c=0
for i in ${f[@]}; do
   echo $i ${d[$c]}
   ((c++))
done

或者没有数组这样的脚本也适合你:

ci=0
for i in file1 file2 file3; do 
   ((ci++))
   cj=1
   for j in location1 location2 location3; do
      [[ $ci = $cj ]] && echo $i $j && break
     ((cj++))
   done
done

输出:

file1 location1
file2 location2
file3 location3

答案 2 :(得分:1)

肯定$SHELL在这里是最简单的,虽然一旦你开始用bash做数组,这个优势开始消散;-)所以,仅仅为了比较,这里是一个简单的非oneliner {{ 1}}方法:

perl

#!/usr/bin/env perl my @arraya = qw/ file1 file2 file3/ ; my @arrayb = qw/ location1 location2 location3/ ; foreach my $i ( 0 .. $#arraya ) {`cp $arraya[$i] $arrayb[$i]` } @arraya可以通过@arrayb匹配和过滤,/m//grep等编程方式构建到非常大的列表中。

c.f。基于find的{​​{3}}工具。