对两个(关联?)数组的每个值进行Bash for循环

时间:2011-11-05 18:47:05

标签: arrays bash for-loop

/ etc / trueuserdomains的每一行都包含用户名及其关联的域。我想为每一行做ln -s /home/$user /var/www/vhosts/$domain。我能够用所需信息定义两个数组。但是,我无法以正确的顺序迭代数组。

#!/bin/bash

domain=(`cat /etc/trueuserdomains | cut -d: -f1`)
user=(`awk '{print $2}' /etc/trueuserdomains`)

for x in "${domain[@]}"
 do
  for y in "${user[@]}"; do
   ln -s /home/$y /var/www/vhosts/$x
  done
done

这为每个用户名重复一个域名,即:

domain1.com user1
domain1.com user2
domain1.com user3

关闭,但我需要:

domain1.com user1
domain2.com user2
domain3.com user3

因此,基本上使用用户数组以正确的顺序遍历域数组。有任何想法吗?听起来像关联数组可能会有所帮助,但不幸的是,这个服务器只有Bash 3,它不支持它们。提前谢谢!

2 个答案:

答案 0 :(得分:5)

我错过了什么:

while IFS=:\  read -r d u; do
  echo ln -s /home/"$u" /var/www/vhosts/"$d"
done < /etc/trueuserdomains

开心时删除 echo

答案 1 :(得分:3)

使用索引可能最简单:

for (( i=0; i<${#domain[*]}; i=i+1 ))
do
    ln -s "/home/${user[$i]}" "/var/www/vhosts/${domain[$i]}"
done