변수와 와일드카드가 포함된 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

명령을 실행한 후 컴퓨터가 변수를 인식하지 못하는 것 같고 예를 들어 /home/administrator/Logs/* /Log_* _2018-03-21_12:03:53.csv를 반환합니다.

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

관련 정보