【发布时间】:2021-04-23 10:03:27
【问题描述】:
我必须编写一个必须包含这些条件的 bash 脚本。我是新手,能给我建议吗?
此脚本使用“命令和 [参数]”运行。 我将它作为变量提供给域,脚本必须使用 "nc" 获取此变量的状态代码(我没有使用 cURL)。如果状态码是 200(仅),bash 脚本打印 OK,否则脚本应该以状态码 7 退出,屏幕上没有任何打印字词。
我写了这个,但是当我使用变量时,我无法得到任何结果。
1-) 这行得通(这是没有变量的,我知道 google 响应 301 所以我写了 grep 301)
#!/bin/bash
STATUS=`printf 'GET / HTTP/1.1\r\nHost: google.com\r\n\r\n' | nc google.com 80 | awk '{print $2}' | grep '301'`
if [ "$STATUS" -eq 301 ]; then
echo "OK"
else
exit 7
fi
2-) 这不起作用 - 请帮我改进这个脚本。我必须用 nc 命令编写来获取响应代码并与 200 进行比较。
#!/bin/bash
DOMAIN=google.com
STATUS=`printf 'GET / HTTP/1.1\r\nHost: "$DOMAIN"\r\n\r\n' | nc "$DOMAIN" 80 | awk '{print $2}' | grep '301'`
if [ "$STATUS" ]; then
echo "OK"
else
exit 7
fi
【问题讨论】:
-
为什么是
nc?curl怎么了? -
我可以用 curl 写作,但他们强迫我用 nc。这是一项任务,所以我必须想办法用 netcat 解决这个问题。
-
好的,我知道了,谢谢。祝你好运!
-
我建议从
GET切换到HEAD。 -
没有
nc、curl或wget:exec 3<>/dev/tcp/www.google.com/80; echo -e 'HEAD / HTTP/1.1\r\nHost: google.com\r\nConnection: close\r\n\r\n' >&3; cat <&3 | while read -r foo status foo; do echo "$status"; break; done
标签: linux bash http centos netcat