我有一个文本文件,如下所示:
b4238ca2-cb8d-11e4-8731-1681e6b88ec1,https,username,password,ipaddress
b4238f0e-cb8d-11e4-8731-1681e6b88ec1,https,username,password,ipaddress
b4239058-cb8d-11e4-8731-1681e6b88ec1,https,username,password,ipaddress
注意:用户名、密码和 IP 地址均已更改,以免泄露敏感信息,它们在我正在使用的文本文件中是真实的。
我编写了以下 bash 脚本来逐行读取并将每个项目放入数组中。以前这有效,但现在它在流程替换中,不再有效。我假设这与我访问数组元素的方式有关,但我不确定出了什么问题。片段如下:
i=0
declare -a devices
while read line
do
devices[i]=$line
((i++))
done < test_data.txt
timestamp=$(date +"%s")
echo "${devices[@]}"
IFS=","
declare -a devarr
for device in "${devices[@]}"
do
devarr=($device)
read dateStrNew dateStrOld < <(curl -k -q "${devarr[1]}://${devarr[2]}:${devarr[3]}@${devarr[4]}/camerainfo" | html2text | gawk '/Newest Sequence/ { new=$3" "$4 }/Oldest Sequence/ {old=$3" "$4}END {OFS=","; print new,old }')
另外,我根据之前问题建议的一些替代代码以及我在研究时遇到的其他代码的组合尝试了以下内容,但它也不起作用。然而,如果这样做的话,事情将会大大简化。这可行并且是更好的解决方案吗?
while read -u 3 line
do
read UUID protocol username passwd ip_address
curl_call="${protocol}://${ip_address}:${username}@${passwd}/report"
echo $curl_call
read dateStrNew dateStrOld < <(curl -k -q "$curl_call" | html2text | gawk'/Newest Sequence/ { new=$3" "$4 }/Oldest Sequence/ {old=$3" "$4}END {OFS=",";print new,old }')
done 3< test_data.txt
非常感谢任何帮助,因为无论如何这将是一个漫长的夜晚!谢谢!
答案1
你理解简单的语法吗?
while IFS=',' read -r UUID protocol username passwd ip_address
do
curl_call="${protocol}://${username}:${passwd}@${ip_address}/report"
echo $curl_call
done < test_data.txt