私は仕事のために、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_Name
とFILE_NAME
) についても一貫性を保ち、変数展開を引用符で囲む習慣をつけましょう。