コマンドの出力から配列を作成してから、配列をループして、配列内の各項目を使用するコマンドを実行しています。配列をループする前に、配列の値の1つを使用する変数を作成したいと思います。配列内のアイテムの1つに特定の文字列が含まれている場合は、この値を使用します。
配列をループする前に、配列から変数を設定するために必要な値を選択する方法がわかりません。私は現在これを持っていますが、私にはうまくいきません。また、ループスルーして値を取得しようとしましたが、値が次のループに続きません。設定されているとは思わず、ループ内でループしているため、ループを開いたままにできません。
readarray -t ARRAY < <( command that gets array of 5 hostnames )
if [[ $ARRAY[@] == *"FT-01"* ]]; then
FTP="$ARRAY"
fi
for server in "${ARRAY[@]}"; do
echo "Server: ${srv}"
echo "-------------------"
if [[ $server == *"ER-01"* ]]; then
echo " FTP server is ${FTP} and this is ${server}"
fi
done
最初のifステートメントが機能しないことは間違いありませんが、配列から必要な値を選択する方法に迷っています。
アイデアを表現するのが難しいのは、シェルスクリプターではなくCプログラマーのように考えていることを示している場合があります。配列とforループは、シェルスクリプトで最も自然なイディオムではありません。代わりにストリーミングとパイプを検討してください。
ホスト名を取得するコマンドが呼び出されたとしましょうlist-of-hostnames
。1行に1つのホスト名を出力する場合は、grepを使用して結果をフィルタリングできます。
FTP=$(list-of-hostnames | grep FT-01)
本当に配列を操作したい場合は、配列をprintf '%s\n'
grep可能なストリームに変換するために使用できます。
FTP=$(printf '%s\n' "${ARRAY[@]}" | grep FT-01)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加