変数とワイルドカードを含むBash wget

変数とワイルドカードを含むBash wget

変数を記述するファイルがあります。

IP_1="xx.xx.xx.xx" ID_1="yyyyy"

IP_2="xx.xx.xx.xx" ID_2="yyyyy"

...

IP_6="xx.xx.xx.xx" ID_6="yyyyy"

ワイルドカード文字を含む変数を使用してwgetコマンドを実行したいと思います。

wget --timeout=5 --wait=2 --tries=3 http://"$IP_* "/getcsv/Log_"$EQ_ *".csv

--output-document=/home/administrator/Logs/"$ID_*"/Log_"$EQ_*"$(日付+%F%T).csv-dv

コマンドを実行した後、コンピュータは変数を認識しないように見えます。

IP_2+ID_2の代わりに変数ファイルのIP_1+ID_1を最初に使用するスクリプトを作成するにはどうすればよいですか?

私は[]、{}、他の""と配列を使って異なるバージョンを試しました。残念ながら仕事はありません。

ありがとう

ありがとう

答え1

あなたはこれをする必要があります

for i in {1..6}; do
    ip_var="IP_$i"
    id_var="ID_$i"
    wget ... "http://${!ip_var}/..." -O "/home/administrator/Logs/${!id_var}/..."
done

これは、マニュアルの説明に従って「可変間接参照」を使用します。https://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion

しかし、番号付けされた変数は厄介です。代わりに配列を使用してください。

ip=( "xx.xx.xx.xx" "xx.xx.xx.xx" ... "xx.xx.xx.xx" )
id=( "yyyyy" "yyyyy"... "yyyyy" )

for ((i=0; i < ${#ip[@]}; i++)); do
    wget ... "http://${ip[i]}/..." -O "/home/administrator/Logs/${id[i]}/..."
done

関連情報