如何制作 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

这将创建一个 bash 数组,您可以通过 访问i该元素$QRCode[$i]或整个数组${QRCode[*]}。 bash 中的数组不必从索引 0 开始。

相关内容