For 迴圈語法 bash 腳本

For 迴圈語法 bash 腳本

有沒有一種方法可以在 bash 腳本中實現這樣的事情?

pureips="10.3.1.111 10.3.1.112 10.3.1.114";
pureservers="a b c";
for ip,server in $pureips,$pureservers; do
    echo "$server | $ip ";
done

謝謝。

答案1

如果您希望將其嵌套,以便每個伺服器針對每個 IP 運行(即運行 9 次),您可以:

for ip in $pureips; do
    for server in $pureservers; do
        echo "$server | $ip "
    done
done

如果您只想追蹤每個項目(例如運行3 次,使用第一個伺服器運行第一個ip,使用第二個伺服器運行第二個ip,等等),您可以使用迭代器並手動呼叫數組的索引。但這確實意味著我們還需要先將字串轉換為陣列:

read -a pureips <<< "10.3.1.111 10.3.1.112 10.3.1.114"
read -a pureservers <<< "a b c"

for ((i=0; i<=${#pureips[@]}; i++)); do
    echo "${pureservers[i]} | ${pureips[i]}"
done

答案2

要使用您嘗試的語法(好吧,幾乎),您必須將字串轉換為陣列:

$ pureips=(10.3.1.111 10.3.1.112 10.3.1.114)
$ pureservers=(a b c)
$ for server in ${pureservers[@]}; do 
    for ip in ${pureips[@]}; do  
        echo "$server | $ip "; 
    done 
done
a | 10.3.1.111 
a | 10.3.1.112 
a | 10.3.1.114 
b | 10.3.1.111 
b | 10.3.1.112 
b | 10.3.1.114 
c | 10.3.1.111 
c | 10.3.1.112 
c | 10.3.1.114 

相關內容