【问题标题】:Bash script. check the website is validbash 脚本。检查网站是否有效
【发布时间】:2014-11-06 20:28:05
【问题描述】:

我需要编写一个脚本来说明给定网站(第一个参数)是否已更改。我写了类似的东西,但它不起作用,无法继续查找错误

#!/bin/bash     

website=$1
time=$2    #frequency of checking the page
x=1
spr=$(diff -s ttt.txt ttt1.txt)
lynx -dump $website | cat > ttt.txt ttt1.txt
until [ 1 -eq 0 ]; do
    sleep $2
    lynx -dump $website | cat > ttt1.txt

        if [ "$(diff -s ttt.txt ttt1.txt)" = "$spr" ]
        then
            lynx -dump $website | cat > ttt.txt
            echo "Changes were made "

        else
            echo "No changes"

        fi
done

【问题讨论】:

  • 在什么情况下不起作用?你有错误吗?是从不报告变化吗?总是报告变化?完全不同的东西?同样通过cat 进行管道传输是没有意义的,您可以直接从lynx 重定向到文件。
  • 它从不报告更改。
  • 您希望 diff -qcmp -s 用于记录更改测试。无需将输出与任何其他输出进行比较。脚本启动时这些文件有什么值(即$spr 的值是多少?)?
  • 文件为空,变量spr用于存放文件相等时的值。
  • 那么您的if 测试是否倒退?如果$spr 是相同的输出,那么当新的diff 输出等于$spr 时,这是否意味着没有任何更改,而当它们不同时则意味着进行了更改?

标签: bash diff lynx


【解决方案1】:

这行是问题所在:

lynx -dump $website | cat > ttt.txt ttt1.txt

因为你在重定向后提供了 2 个文件,所以 shell 会看到:

cat ttt1.txt >ttt.txt

所以 cat 是从 ttt1.txt 读取,不是从它的标准输入


演示:

$ cat > a <<END
hello
END
$ cat > b <<END
world
END
$ echo foo | cat > a b
$ cat a
world
$ cat b
world

“foo”不存储到任何一个文件中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 2013-07-23
    • 2018-10-09
    相关资源
    最近更新 更多