BASH如果那么其他用引用文本

时间:2014-03-04 22:04:10

标签: bash

我正在尝试编写一个简短的脚本,通过邮政编码从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

1 个答案:

答案 0 :(得分:2)

最有可能的是,从curl读取的行以CR / LF结尾。 grep会将LF作为行尾,并将CR留在行中,与您的任何一种模式都不匹配。 (其他空白问题也可能导致同样不可见的不匹配,但由于HTTP坚持使用它们,所以流浪CR很常见。)

最简单的解决方案是使用不太具体的匹配,如glob或正则表达式;这些都可以使用bash的[[(而不是[)命令。

例如:

if [[ $chk =~ /fios-plans\.html ]]; then 

将进行子字符串比较