代码之家  ›  专栏  ›  技术社区  ›  Nitin Kumar

在循环上循环直到满足条件

  •  -2
  • Nitin Kumar  · 技术社区  · 3 年前

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

    sample.txt

    abc.com
    xyz.com
    

    我想使用 until loop 在里面 while loop 但不确定它是否有效。有人能帮我吗。

    如前所述,我曾想过在while循环中使用until循环,但不确定它是否有效

    1 回复  |  直到 3 年前
        1
  •  1
  •   Will    3 年前

    使用 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