我想制作一个脚本,以便检查是否可以连接到多个 URL。
例如我curl -i -L --silent URL | grep "HTTP/2 200" >> *.txt
我想将它与 if 语句结合起来,这样我就可以做到if grep "HTTP/" 200" >> *.txt", then: grep "Location" >> *.txt
因此,如果它确实 grep “HTTP/2 200”,那么它也应该 grep “位置”(URL)。但我无法让它工作。
我还想echo "-------------------------------------"
在每个 URL 输出之间执行此操作,以便它在文件中显示如下:
#URL1
HTTP(1)
URL(1)
#URL2
HTTP(2)
URL(2)
等等。
谢谢你的帮助。
答案1
如果你想要HTTP 响应/状态和网址保存为您想要的格式的文件。然后curl
仅凭这一点就能做到这一点……它有选择权-w
或--write-out
(它定义了操作成功完成之后在 stdout 上显示的内容。格式是一个字符串,可能包含纯文本和任意数量的变量...例如-w "-----------\nStatus: %{http_code}\nURL: %{url}\n"
),如果将其余输出重定向到 eg,/dev/null
那么您最终会得到您想要的干净结果,然后您可以重定向该结果并将其附加到名为 eg 的文件中,url.txt
如下所示:
curl -o /dev/null -s -w "-----------\nStatus: %{http_code}\nURL: %{url}\n" https://askubuntu.com >> url.txt
如果你有一个 URL 列表(每行各占一行)在一个名为list.txt
例如这样的文件中:
$ cat list.txt
https://askubuntu.com/
https://unix.stackexchange.com/
https://notworkingurlblabla.com/
然后,你可以检查该文件中的所有 URL,过滤掉非 200
状态 URL 并将结果url.txt
一次性附加到所有内容,例如:
xargs -n 1 <list.txt curl -o /dev/null -s -w "%{http_code} %{url}\n" | \
awk '{if ($1 == "200") printf "------------\nStatus: "$1"\nURL: "$2"\n"}' >> url.txt
显然,您也可以使用awk
单个 URL 来过滤输出,如下所示:
curl -o /dev/null -s -w "%{http_code} %{url}\n" https://askubuntu.com/ | \
awk '{if ($1 == "200") printf "------------\nStatus: HTTP "$1"\nURL: "$2"\n"}' >> url.txt