다음 코드를 사용하여 파일에서 데이터를 읽고 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=
파일의 나머지 부분을 삭제한 후 배열 요소로 읽습니다(그런 다음 Remove newlines 사용 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}")