Bash:嵌套循环和“检查更改”脚本

时间:2017-04-24 08:52:03

标签: bash

我是新手来编写脚本并尝试编写一个基本的“检查更改”脚本,该脚本每隔几秒就会轮询一次URL并比较结果以进行更改。轮询页面时,如果返回的HTML包含特定的字符串,我需要对其进行连续轮询,直到它与原始页面进行比较。我不是直接DIFF返回的HTML,因为它包含时间戳,所以总是会有所不同。相反,我只是检查字符串是否被删除。

#!/bin/bash

URL="http://x.x/x"

for (( ; ; )); do
rm tempnew
rm tempold
mv new.html old.html 2> /dev/null
curl $URL -s > new.html

#----------------------------------------
#need loop here that will check new.html for particular strings and if 
present, keep retrieving page until they're not present before continuing 
script.
#----------------------------------------

grep "search text" new.html > tempnew
grep "search text" old.html > tempold
DIFF_OUTPUT="$(/opt/bin/diff tempnew tempold)"
if [ "0" != "${#DIFF_OUTPUT}" ]; then
echo page changed
sleep 20
fi
done

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

你的循环可能是这样的:

while true; do
  grep "particular string" new.html
  if [ $? -gt 0 ]; then
    break;
  fi
  curl $URL -s > new.html
done

符号$?返回上次执行的命令(即grep)的退出代码。如果找到匹配项,则grep返回0;如果未找到匹配项,则返回1。其他错误代码表示其他问题 - 例如2意味着找不到文件。您可能应该优化此检查,或确保文件已正确下载。

如果您需要运行多项检查,那么您可以替换" break"用一个代码块再做一次测试,并包含一个条件中断。对于另一个检查,再次用另一个代码块代替中断"如果...然后中断fi"等等。

希望它有所帮助。