【问题标题】:checking response control just "connected" or not with wget检查响应控制是否“连接”或不使用 wget
【发布时间】:2020-02-22 07:25:17
【问题描述】:

我只是想写一个脚本来控制响应是否包含“已连接”

 #!/bin/bash
cat control.txt | while read link // control.txt contains http and https urls
do
if [[ $(wget --spider -S $link 2>&1 | grep "connected") =~~ *"connected"* ]];
then echo "OK"; 
else echo "FAIL";
fi
done

输出:

sh -x portcontrol.sh 
portcontrol.sh[2]: Syntax error at line 4 : `=~' is not expected.

【问题讨论】:

  • 而且...它有效吗?如果没有,错误是什么?请改进您的问题,以便人们可以帮助您
  • 当我尝试使用 sh -x responsecontrol.sh 时无法正常工作,它显示出意外 =~~“已连接”
  • 请编辑您的问题并粘贴整个错误。最好是所有内容:运行脚本的提示和实际的错误消息
  • 没关系,你现在可以帮忙吗?
  • 我无法完全重现您的问题,但有一件事引起了我的注意。这个令牌:=~~。我知道 bash 有 =~,但没有两个波浪号。 =~~ 是什么意思?

标签: linux bash shell unix ksh


【解决方案1】:

如果你只是想看看连接请求是否成功,而wget的输出是这样的:

Connecting to <hostname>|<ip_addr>|:<port>... connected.

只要做就足够了:

if [[ $(wget --spider -S $link 2>&1 | grep -c " connected\.") -gt 0 ]];
  then echo "OK"; 
  else echo "FAIL";
fi

检查退出代码也可以,但这取决于您的实际要求。

【讨论】:

    【解决方案2】:

    如果我正确阅读了您的脚本,您正在检索页面,但忽略了其内容,您只想查看wget 是否显示字符串“已连接”。

    如果是这样,您的代码可以简化如下:

    if wget --spider -S $link 2>&1 | grep "connected" > /dev/null
    then 
        echo "OK"; 
    else 
        echo "FAIL";
    fi
    

    您不需要捕获 wget 的输出并对其运行正则表达式搜索; grep 在搜索您提供的字符串时已经返回 0(成功)或 1(未找到)。

    那个返回码可以直接用来控制if

    grep 的输出被重定向到/dev/null 以不显示在屏幕或脚本输出中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-25
      • 2011-04-19
      • 2020-12-08
      • 2015-08-27
      • 1970-01-01
      • 2011-01-23
      • 2022-11-15
      相关资源
      最近更新 更多