带变量和通配符的 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-d-v

执行命令后,机器似乎无法识别该变量并返回 /home/administrator/Logs/* /Log_* _2018-03-21_12:03:53.csv 例如。

我怎么可能脚本首先使用变量文件中的 IP_1 + ID_1,而不是 IP_2 + ID_2,...?

我尝试了使用 []、{}、不同的“”和数组的不同版本。不幸的是我没有任何工作

谢谢

此致

答案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

相关内容