For ループで NC を使用して IP アドレスを含む配列を反復処理する - 構文エラー: 無効な算術演算子

For ループで NC を使用して IP アドレスを含む配列を反復処理する - 構文エラー: 無効な算術演算子

私は仕事のために、IP アドレスの配列を反復処理し、NC を使用して各 IP アドレスの開いているポートをスキャンする Bash スクリプトを作成中です。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

あなたは繰り返したいようですインデックス2つの配列の - これは次のようにして行うことができます間接

#!/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) についても一貫性を保ち、変数展開を引用符で囲む習慣をつけましょう。

関連情報