在 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),并养成引用变量扩展的习惯。

相关内容