我有一个要求,我必须从文本文件(sites.txt)中读取网站列表,并检查自上次运行脚本以来是否有任何静态更改。我的输入是
https://en.wikipedia.org/wiki/Stack_Overflow
https://en.wikipedia.org/wiki/Linux
https://en.wikipedia.org/wiki/Linus_Torvalds
如果有任何一个网站宕机,则应像下面的输出示例一样,将地址名称和消息FAILED打印到stderr。
https://en.wikipedia.org/wiki/Stack_Overflow FAILED
如果输入文本文件包含#,它也应忽略该行作为注释。我的尝试是创建2个html文件old.html和new.html,并在if语句中检查html文件的减法是否不同于0。我的问题是我的输出与我预期的不同,并且curl命令始终假设网站已关闭。我的输出是:
FAILED/en.wikipedia.org/wiki/Stack_Overflow
FAILED/en.wikipedia.org/wiki/Linux
https://en.wikipedia.org/wiki/Linus_Torvalds FAILED
这是我的代码:
#!/bin/bash
while read line || [ -n "$line" ]; do
[[ "$line" = "\#*" ]] && continue
if [ "$(curl -s --head --request GET "$line" | grep "200 OK" > /dev/null)" ]; then
mv new.html old.html 2> /dev/null
curl "$line" -L --compressed -s > new.html
DIFF_OUTPUT="$(diff new.html old.html)"
if [ "0" != "${#DIFF_OUTPUT}" ]; then
echo "$line Changed"
fi
else
echo "$line FAILED" >&2
fi
done <"$1"
有人可以帮助我吗?
答案 0 :(得分:1)
sites.txt
具有DOS行结束符\r\n
,而不是UNIX行结束符\n
。 \r
回车引起光标移回第一列。您需要convert sites.txt
to UNIX format或delete the carriage returns from $line
。