Я продолжаю работать, создают сценарий Bash для моего задания, которое выполняет итерации через массив IP-адресов и использует NC для сканирования для открытых портов на каждом из тех IP-адресов. Если я должен был использовать команду NC отдельно и вручную вывести команду для каждого IP-адреса, то это будет работать, но это не хороший способ сделать это. Однако я сталкиваюсь с ошибкой, когда я использую массив со всеми IP-адресами в ней. Вот пример моего кода (использующий IP-адреса Google и Microsoft для примеров и конфиденциальности):
#!/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[@]}
перенесены в кавычки, я получаю ту же ошибку.
Вы, кажется, хотите выполнить итерации по индексам двух массивов - который можно сделать косвенность использования
#!/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_Name
по сравнению с FILE_NAME
) и выработайте привычку заключения в кавычки переменных расширений.