读取包含 n 行的文件并打印已完成的行数

读取包含 n 行的文件并打印已完成的行数

我正在使用以下 bash 脚本来检查文件中的活动主机,

echo "Checking for 200 status code.."
cat $1 | sort -u | while read line; do
    if [ $(curl -I -s "https://$line" -o /dev/null -w "%{http_code}\n") = 200 ]
        then
            echo $line >> livedomains
    else
        echo $line >> otherdomains
fi
done < $1

代码工作正常,我需要的是在一段时间后打印检查的行数(url),以通知用户要检查的剩余行数(url)。

答案1

#!/bin/bash

# update status after step seconds or greater
step=5
count=0
echo "Checking for 200 status code.."
start=$(date +'%s')

sort -u "$1" | while read line; do
    http_status=$(curl -I -s "https://$line" -o /dev/null -w "%{http_code}\n")
    case "$http_status" in
        200)
            echo "$line" >> livedomains
            ;;
        302)
            echo "$line" >> redirecteddomains
            ;;
        *)
            echo "$line" >> otherdomains
    esac
    ((count++))

    now=$(date +'%s')
    if [ "$start" -le "$((now - step))" ]; then
        start=$now
        echo "completed: $count"
    fi
done

更新间隔设置为5秒,您可以将其更改为120。

编辑:我改变了主意并使用计数器变量而不是wc.

额外的变化:

  • #!/bin/bash在第一行添加了 shebang
  • 删除< $1最后一行的输入(否则未排序)
  • 添加了一些引号

相关内容