【问题标题】:Bash script while with boolean and counter使用布尔值和计数器时的 Bash 脚本
【发布时间】:2014-01-14 11:03:07
【问题描述】:

有人可以帮我解决这个问题...我似乎无法获得有效的 while 语句(它从不进入循环)...尝试了许多不同的语法,但我被卡住了。

tries=0
success=false

while (!${success} && ${tries} -lt 10); do
  {
    echo "Trying..." &&
    myCommand &&
    success=true &&
    echo "Success"
  } || {
    success=false &&
    echo "Failed"
  }
  let tries=tries+1
done

【问题讨论】:

    标签: bash


    【解决方案1】:

    只是一点点改变

    tries=0
    success=false
    
    while (( !${success} && ${tries} < 10 )); do
      {
        echo "Trying..." &&
        myCommand &&
        success=true &&
        echo "Success"
      } || {
        success=false &&
        echo "Failed"
      }
      let tries=tries+1
    done
    

    Difference in Bash between IF statements with parenthesis and square brackets

    【讨论】:

    • 好的,这让我更进一步。谢谢... 但是,我的 success=true 变量分配似乎有问题。循环不会在该条件下退出,无论命令成功与否,它都会执行 10 次。有什么想法吗?
    • 琐碎地,success=0while (( ${success} &lt; 1 &amp;&amp; ${tries} &lt; 10 )); 做......应该工作
    【解决方案2】:

    您似乎正试图在bash 中编写 C 代码。具体来说,您将success 用作布尔标志和可执行程序有点尴尬。试试

    while (( tries < 10 )); do
        { myCommand && echo Success && break; } || { echo Failed && let tries=tries+1; }
    done
    

    使用显式的if 语句也会更具可读性:

    while (( tries < 10 )); do
        if myCommand; then
            echo Success
            break
        else
            echo Failed
            let tries=tries+1
        fi
    done
    

    【讨论】:

      猜你喜欢
      • 2013-08-03
      • 1970-01-01
      • 1970-01-01
      • 2014-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多