【问题标题】:urls validation in shell scriptsshell脚本中的url验证
【发布时间】:2020-01-28 13:27:51
【问题描述】:

我有特定服务的 url 列表。 想要根据响应验证我所有的 url 是否正在运行,并打印特定服务未运行的状态。主要问题是如何显示特定服务未运行。

while read url; do
  curl -o /dev/null --silent --head --write-out '%{http_code}' "$url"
 # echo " $LINE"
  done < softwareurls.txt
  status="$(curl -Is $url | head -1)"
  validate=( $stats )
  if [ ${validate[-2]} == "200" ]; then
      echo OK
  else
      echo NOT RESPONDING
  fi

softwareurls.txt:示例

service1=http://192.168.70.10:8080/
service2=http://192.168.80.170:9000/shell
service3=http://192.168.10.10:8085/
........
servicen=http://www.sample.com/

【问题讨论】:

  • 你正在快速关闭你的时间。现在,您对每个 URL 运行 curl,然后检查状态。您应该将 done 语句移到脚本的末尾。这样它将在每个 url 上运行 curl,检查它的状态,说它是否好,然后继续下一个。

标签: bash shell


【解决方案1】:

我是这样做的:

#!/bin/bash
#

while read service
do
    url=$(echo $service | cut -d'=' -f2)

    status=$(curl -o /dev/null --silent --head --write-out '%{http_code}' "$url")
    if [ $status == '200' -o $status == '301' -o $status = '302' ]
    then
        echo "$url: OK"
    else
        echo "$url: NOT RESPONDING"
    fi
done < softwareurls.txt

注意事项:

  • 当您从 softwareurls.txt 中提取您的行时,您必须从该行中提取 url。那是url=$() 行。
  • curl 使用您使用的选项,将从 url 输出 http 状态响应。因此,只需存储该值并对其进行测试。那就是$status=$()这一行。
  • 许多 HTTP 响应可能是有效的。我假设 200、301 和 302 都可以。由于您的网址似乎在您的设置内部,您可以根据需要修改代码。
  • 仅供参考:在您的代码中,您设置了 $status,但在下一行您使用了 $stats。并且 $stats 没有设置。

我希望这会有所帮助,尼克。

【讨论】:

  • url=${service#*=};或者最好用IFS='=' 阅读;或者更好的是使用空格分隔的输入格式。此外,复杂的if 可以非常优雅地替换为case 语句。 case $status in 200 | 301 | 302) echo "$url: OK";; *) echo "$url: NOT RESPONDING";; esac
【解决方案2】:

你可以试试这个,

#!/bin/bash
function validate_url(){
url=http://nginx.org/download/nginx-1.16.1.tar.gz
  if [[ `wget -S --spider $url  2>&1 | grep 'HTTP/1.1 200 OK'` ]]; then
    return 0
  else
    return 1
  fi
}
if validate_url $endpoint; then
    echo "NGINX-1.16 is a valid URL"
  else
    echo "NGINX-1.16 is invalid URL"
fi

https://github.com/laksgreen/URL-validator/blob/master/url_scripts.sh

【讨论】:

    猜你喜欢
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多