/ 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,它不支持它们。提前谢谢!
答案 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