我刚刚尝试编写一个脚本,该脚本仅控制响应中是否包含“已连接”
#!/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.
答案 0 :(得分:0)
如果您只是想查看连接请求是否成功,并且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
检查退出代码也可以,但是这取决于您的实际需求。
答案 1 :(得分:0)
如果我正确阅读了脚本,则表示您正在检索页面,但忽略了页面内容,而您所要做的就是查看wget
是否显示字符串“ connected”。
如果是这样,您的代码可以简化如下:
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
,以使其不显示在屏幕或脚本输出中。