在 For 迴圈中使用 NC 迭代具有 IP 位址的陣列 - 語法錯誤:算術運算子無效

在 For 迴圈中使用 NC 迭代具有 IP 位址的陣列 - 語法錯誤:算術運算子無效

我正在為我的工作建立一個 Bash 腳本,該腳本迭代 IP 位址數組,並使用 NC 掃描每個 IP 位址上的開放連接埠。如果我單獨使用 NC 命令並手動鍵入每個 IP 位址的命令,那麼它會起作用,但這不是一個好方法。但是,當我使用包含所有 IP 位址的陣列時,我遇到了錯誤。這是我的程式碼範例(使用 Google 和 Microsoft 的 IP 位址作為範例和隱私):

#!/bin/bash
IP_Addresses=(
172.217.6.142
191.239.213.197
)
FILE_Name=(
"google"
"microsoft"
)
for i in "${IP_Addresses[@]}"
do
    nc -w2 -zv4 ${IP_Addresses[@]} 1-100 > "${FILE_Name[$i]}".log 2>&1
done

我從這個範例中得到的錯誤(與我從實際腳本中得到的範例類似)是這樣的:

./testPorts.sh: line 14: 172.217.6.142: syntax error: invalid arithmetic operator (error token is ".217.6.142")
./testPorts.sh: line 14: 191.239.213.197: syntax error: invalid arithmetic operator (error token is ".239.213.197")

我已將程式碼放入名為 testPorts.sh 的檔案中,使其可執行並從終端運行它。這就是我得到的。第 14 行是 NC 指令所在行。有人知道我在這裡做錯了什麼,如果是這樣,我該如何解決?

我嘗試將 IP 位址放在引號中,但出現相同的錯誤。如果數組中的 IP 位址用引號括起來和/或變數${IP_Addresses[@]}用引號括起來,我會收到相同的錯誤。

答案1

您似乎想要迭代指數兩個陣列的 - 您可以使用間接

#!/bin/bash
IP_Addresses=(
172.217.6.142
191.239.213.197
)
FILE_Name=(
"google"
"microsoft"
)
for i in "${!IP_Addresses[@]}"
do
    nc -w2 -zv4  "${IP_Addresses[$i]}" 1-100 > "${FILE_Name[$i]}".log 2>&1
done

變數名稱也要保持一致(FILE_NameFILE_NAME),並養成引用變數擴展的習慣。

相關內容