我使用以下代码从文件中读取数据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 行和第 2 行,删除certificate=
文件的其余部分并将其作为数组元素读取(然后使用 删除换行符tr
)。
arr[2]="$(sed '1,2d;s/certificate=//' abcd.txt | tr -d '\n' )"
老实说,我也不认为循环遍历具有不同复杂性的三个元素没有帮助。因此前两个元素就是:
arr[0]="$( awk -F'=' 'NR == 1 { print $2 }' abcd.txt )"
(与第二个元素相同NR == 2
)或与sed
上面
arr[0]="$(sed -n '1s/.*=//p' abcd.txt)"
(第二个元素与 相同2s...
)
答案2
mapfile -t parameters < <(sed '1,4s/.*=//' abc)
parameters[2]=$(printf '%s\n' "${parameters[@]:2}")