unix 迭代循环直到满足条件

wvyml7n5  于 2023-08-04  发布在  Unix
关注(0)|答案(1)|浏览(113)

我有一个要求,其中我希望我的shell脚本读取一个文本文件中有一些URL。我想让它在 curl 的帮助下一个一个地击中那些。网站可以返回说要么“成功”或“失败”。如果在第一次尝试的情况下,URL显示失败,那么脚本应该再次迭代并尝试命中相同的URL,直到它显示成功,然后继续第二个URL。

sample.txt

abc.com
xyz.com

字符串
我想在whileloop中使用until loop,但不确定它是否能工作。有人能帮我吗?
正如前面所说的,我想在while循环中使用until循环,但不确定它是否能工作

goqiplq2

goqiplq21#

使用until循环:

#!/bin/bash

retry_timer=5
success_timer=120

function check_url_success() {
  local url=$1
  local response=$(curl -s /dev/null "$url")
  if [ "$response" == "success" ]; then
    return 0
  else
    return 1
  fi
}

urls=()
while IFS= read -r url; do
  urls+=("$url")
done < "sample.txt"

for url in "${urls[@]}"; do
  echo "Trying $url..."
  
  until check_url_success "$url"; do
    echo "Failed. Retrying..."
    sleep $retry_timer  # Add a delay before retrying
  done
  echo "Success for $url!"
  sleep $success_timer # Add a delay of 2 min when curl ping succeeded
done

字符串

相关问题