Bash 루프를 만드는 방법

Bash 루프를 만드는 방법

이 코드를 단순화하고 더욱 강력하게 만드는 가장 좋은 방법은 무엇입니까?

QRCode=$(cat /etc/wireguard/qr/client1)
QRCode2=$(cat /etc/wireguard/qr/client2)
QRCode3=$(cat /etc/wireguard/qr/client3)
QRCode4=$(cat /etc/wireguard/qr/client4)
QRCode5=$(cat /etc/wireguard/qr/client5)

나는 이것을 루프로 설정하고 원하는 만큼 클라이언트를 구축하기 위해 임의의 숫자로 변경할 수 있습니다. 아래는 내가 시도했지만 작동하지 않은 것입니다.

# Change Clients variable to create different amounts of qr codes
clients=10

counter=1
while [ $counter -le $clients ]
do
    QRCode${counter}=$(cat /etc/wireguard/qr/client${counter})
    ((counter++))
done

파일(client1, client2, client3)을 기반으로 10가지 변수(QRCode1, QRCode2, QRCode3)와 10가지 값이 생성됩니다.

답변1

단일 변수 대신 배열을 사용하여 파일 수를 알고 있습니다.

declare -a QRCodes

for i in {1..10}; do 
  QRCodes[$i]="$(cat /etc/wireguard/qr/client$i)"
done

그런 다음 특정 값을 검색합니다.

$ echo "${QRCodes[1]}"
<some value from client1 file>

모든 값을 검색하려면:

printf "%s\n" "${QRCodes[@]}"

답변2

for간단한 루프를 다음과 같이 사용할 수 있습니다 .

beg=1
end=5
for i in $(seq $beg $end)
do
    QRCode[$i]=$(cat /etc/wireguard/qr/client$i) 
done

i그러면 요소 $QRCode[$i]또는 전체 배열 에 액세스하여 액세스할 수 있는 bash 배열이 생성됩니다 ${QRCode[*]}. Bash의 배열은 인덱스 0에서 시작할 필요가 없습니다.

관련 정보