我正在尝试编写一个简短的脚本,通过邮政编码从5位数的邮政编码列表中检查verizon fios的可用性。
这个的基础我已经工作但是将curl的recived输出与if语句中的预期输出进行比较是行不通的。
我知道有一个更好的&更干净的方式,但我真的对这种方法有什么问题感兴趣。我认为这与报价混杂起来有关。
让我知道你们的想法。我原本以为这会是一个快速的小脚本。哈。谢谢你的帮助
这是我到目前为止所做的:
#!/bin/bash
Avail='<link rel="canonical" href="http://fios.verizon.com/fios-plans.html#availability-msg" />'
NotAvail='<link rel="canonical" href="http://fios.verizon.com/order-now.html#availability-msg" />'
while read zip; do
chk=`curl -s -d "ref=GIa6uiuwP81j047HjKMHOwEyW4QJTYjG&PageID=page9765&AvailabilityZipCode=$zip" http://fios.verizon.com/availability_post4.php --Location | grep "availability-msg"`
#echo $chk
if [ "$chk" = "$Avail" ]
then
fios=1
elif [ "$chk" = "$NotAvail" ]
then
fios=0
else
fios=err
fi
echo "$zip | $fios"
done < zipcodes.txt
答案 0 :(得分:2)
最有可能的是,从curl
读取的行以CR / LF结尾。 grep
会将LF
作为行尾,并将CR
留在行中,与您的任何一种模式都不匹配。 (其他空白问题也可能导致同样不可见的不匹配,但由于HTTP坚持使用它们,所以流浪CR很常见。)
最简单的解决方案是使用不太具体的匹配,如glob或正则表达式;这些都可以使用bash的[[
(而不是[
)命令。
例如:
if [[ $chk =~ /fios-plans\.html ]]; then
将进行子字符串比较