次のコードを使用してファイルからデータを読み取り、配列に保存しようとしていabcd.txt
ますが、保存できますが、証明parameters
書全体をインポートすることはできません。これを達成する方法を教えてください。619617
parameter[0]
update
parameters[1]
parameters[2]
filename="/home/abcd.txt"
i=1
index=0
while read -r line
do
i=$line
parameters[$index]=$(echo $i | awk -F'=' '{print $2}')
i=$((i+1))
index=$((index+1))
if [ "$index" == "3" ]
then
break
fi
done < "$filename"
echo ${parameters[0]} ${parameters[1]} ${parameters[2]}
# python /opt/symstream/bin/configure.py ${parameters[0]} ${parameters[1]} ${parameters[2]}
ファイル名には次のデータが含まれます。
cat abcd.txt
serial_no=619617
action=update
certificate=-----BEGIN CERTIFICATE-----
MIIDaTCCAlGgAwIBAgIJAPwqZH3OF7E4MA0GCSqGSIb3DQEBBQUAMEsxCzAJBgNV
BAYTAklOMRIwEAYDVQQKDAlTeW1zdHJlYW0xDDAKBgNVBAsMA1JuRDEaMBgGA1UE
AwwRcGMxLnN5bXN0cmVhbS5jb20wHhcNMTUwNzAzMDQ0ODE2WhcNMjUwNzAzMDQ0
ODE2WjBLMQswCQYDVQQGEwJJTjESMBAGA1UECgwJU3ltc3RyZWFtMQwwCgYDVQQL
DANSbkQxGjAYBgNVBAMMEXBjMS5zeW1zdHJlYW0uY29tMIIBIjANBgkqhkiG9w0B
AQEFAAOCAQ8AMIIBCgKCAQEA2CJtHYzvIAc7vX9l3Dw5VInEsY4WBjvch/CWSWEW
Xm3QMKadXaBoamOdjKXaowW//dXAYjf4d6vH3h+f9dpzcTkf7oN8pYin6DiXYZJK
CCL7u4hOY0eIq02OJcZwl/qhms+bmxTPN8ph+qnRIot7NzxnkT4AyyPyvGLtSLL6
4E1NGBWZF7JLJKwuvHuMYC2dYHYdBie2G9rczel09hteaoeaulRyWo+sKiFQRO15
XQWfEWfcZhaLHDkNbR+1K/YctuZwFvXPUjC8RFmRptz8n2ZqT1uYrTxKFAXcg/Cp
/DFRV3Q/6/pYWf8u1u2v1Mg5MXdZnjf4jTNUJcmJQiJAsQIDAQABo1AwTjAdBgNV
HQ4EFgQU9snp1dOf74Af6619J838d3jjuAAwHwYDVR0jBBgwFoAU9snp1dOf74Af
6619J838d3jjuAAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAZWrs
icxkOBOrw2oJQ04fibtw/gfaaGeHWQA73s+nsFtgI9TbpzGt1HWcESuJfEeg7XDd
gKOU2MNcQE6pIi1qjX104R5o66Covco4K1bZdvBmiKJdXNkoECOoXpupWaq+KoVY
Px1d1Yv697+q2dmtGG3ThlfJeKdmCx4X/miajK5Mbota49DTFFckba9RsSBottfd
74VIUcw581A9W3b9C5lk8bcvQfWsdnJAMwN5ktrIcVyp29ti5tdLPEXKmCZcFq/z
KKl2+HPKd8m5t2BaJn6wkPd3Qj1dZQ5kLlgKJg9IbWD6+S1MaOHNDvH8o1Z29dEY
Jv/a5hmEAJ8BX4v9Cw==
-----END CERTIFICATE-----
答え1
問題は、while read
ファイルを1行ずつ読み取ることです。証明書は複数行(明示的な改行を含む)に分散されているため、以前のように簡単に読むことはできません。すべてのファイルが同じで複数の証明書などがない場合は、次のことができます。
1行目と2行目を削除し、certificate=
ファイルの残りの部分を削除してから配列要素に読み込みます(次にRemove newlinesを使用tr
)。
arr[2]="$(sed '1,2d;s/certificate=//' abcd.txt | tr -d '\n' )"
正直なところ、さまざまな複雑さを持つ3つの要素を繰り返すことも役に立たないと思います。したがって、最初の2つの要素は次のようになります。
arr[0]="$( awk -F'=' 'NR == 1 { print $2 }' abcd.txt )"
(2番目の要素と同じNR == 2
)またはsed
上記と同じ
arr[0]="$(sed -n '1s/.*=//p' abcd.txt)"
(2番目の要素はと同じ2s...
)
答え2
mapfile -t parameters < <(sed '1,4s/.*=//' abc)
parameters[2]=$(printf '%s\n' "${parameters[@]:2}")