web-dev-qa-db-ja.com

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つの配列のindicesを反復処理したいようです-これはindirectionを使用して実行できます

#!/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)、変数展開を引用する習慣を身に付けます。

1
steeldriver