簡體   English   中英

對兩個(關聯?)數組的每個值進行Bash for循環

[英]Bash for loop for each value of two (associative?) arrays

/ 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,它不支持它們。 提前致謝!

我錯過了什么:

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

快樂時刪除回音

也許最簡單的方法是使用索引:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM