检查给定URL的响应代码-脚本在检查所有URL后不会停止



我在下面做了一个脚本。该脚本正在检查在列a中列出的每个URL的响应代码,例如。csv文件。一切都如我计划的那样工作,但检查所有URL后,脚本被冻结。我必须按ctrl+c组合键来停止它。如何使脚本在检查完所有URL后自动结束运行?

#!/bin/bash
for link in `cat $1` $2;
do
response=`curl --output /dev/null --silent --write-out %{http_code} $link`;
if [ "$response" == "$2" ]; then
echo "$link";
fi
done

您的脚本由于for link行中的$2而挂起(当它挂起时,检查ps aux | grep curl,您会发现一个curl进程,响应代码作为最后一个参数)。此外,for link in `cat $1` $2不是您应该如何从文件中读取和处理行。

假设您的example.csv文件每行只包含一个URL,没有其他内容(这基本上使其成为纯文本文件),这段代码应该做您想要的:

#!/usr/bin/env bash
while read -r link; do
response=$(curl --output /dev/null --silent --write-out %{http_code} "$link")
if [[ "$response" == "$2" ]]; then
echo "$link"
fi
done < "$1"

逐字复制您的代码,并用空格分隔几个url来创建一个测试文件,它确实会挂起。但是,从for的末尾删除$2可以让脚本完成。

for link in `cat $1`;

最新更新