Bash:嵌套循环和;“检查是否有变化”;剧本

Bash:嵌套循环和;“检查是否有变化”;剧本,bash,Bash,我不熟悉bash脚本,尝试编写一个基本的“检查更改”脚本,每隔几秒钟轮询一个URL并比较更改结果。当对页面进行轮询时,如果返回的HTML包含特定字符串,我需要不断对其进行轮询,直到与原始页面进行比较。我没有直接区分返回的HTML,因为它包含一个时间戳,所以总是不同的。相反,我只是检查字符串是否被删除 #!/bin/bash URL="http://x.x/x" for (( ; ; )); do rm tempnew rm tempold mv new.html old.html 2>

我不熟悉bash脚本,尝试编写一个基本的“检查更改”脚本,每隔几秒钟轮询一个URL并比较更改结果。当对页面进行轮询时,如果返回的HTML包含特定字符串,我需要不断对其进行轮询,直到与原始页面进行比较。我没有直接区分返回的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

谢谢你的帮助

您的循环可能类似于:

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表示找不到文件。也许您应该改进此检查,或者确保文件已正确下载

如果您需要运行多个检查,那么您可以用一个代码块替换“中断”,该代码块执行一个以上的测试,并包含一个条件中断。对于另一个检查,再次用另一个代码块“if…then break fi”替换中断,以此类推


希望有帮助。

你真正的问题是什么?@Meeko如果是,你应该接受答案。阅读有关提问和回答的规则和建议。