代码之家  ›  专栏  ›  技术社区  ›  AKS

直到循环未终止或保持递增变量的值为止

  •  2
  • AKS  · 技术社区  · 6 年前

    if 语句)或使用 $c 变量尝试 " 双引号。

    export c=1; ssh auser@someserver "until [[ 1 -eq 2 ]]; do echo \"Value of 'c' == $c\"; c=`expr $c + 1`; echo \"$c - Incremented value: `expr $c + 1`\"; if [[ $c -gt 5 ]]; then break; fi; sleep 2 ; done;"
    

    $ export c=1; ssh root@$CHEF_SERVER \
    > "until [[ 1 -eq 2 ]]; do \
    >   echo \"Value of 'c' == $c\"; c=`expr $c + 1`; \
    >   echo \"$c - Incremented value: `expr $c + 1`\"; \
    >   if [[ $c -gt 5 ]]; then break; fi; \
    >   sleep 2; \
    >   echo; \
    > done;"
    

    Value of 'c' == 1
    1 - Incremented value: 2
    Value of 'c' == 1
    1 - Incremented value: 2
    Value of 'c' == 1
    1 - Incremented value: 2
    Value of 'c' == 1
    1 - Incremented value: 2
    Value of 'c' == 1
    1 - Incremented value: 2
    Value of 'c' == 1
    1 - Incremented value: 2
    Value of 'c' == 1
    1 - Incremented value: 2
    Value of 'c' == 1
    1 - Incremented value: 2
    Value of 'c' == 1
    1 - Incremented value: 2
    Value of 'c' == 1
    1 - Incremented value: 2
    Killed by signal 2.
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Inian    6 年前

    您需要了解shell变量需要正确地 在条件句或内部赋值中使用它们之前 ssh 在双引号下。如果不这样做,即使在通过远程机器执行命令之前,变量也会扩展。所以在你的情况下,无论你增加 c 变量是否展开,远程机器中的条件始终保持如下。

    if [[ 1 -gt 5 ]]; then
        break
    fi
    

    阿尔索 expr 非常过时,使用传统的C风格循环增量 ((..))

    ssh root@$CHEF_SERVER "
    until [[ 1 -eq 2 ]]; do
        ((c = c+1))
        echo "Incremented value: \$c"
        if [[ \$c -gt 5 ]]; then
            break
        fi
        sleep 2
    done"
    
        2
  •  0
  •   jhnc    6 年前

    变量在双引号字符串中展开。 回跳也是如此。

    您声明了一个变量 c 然后给它赋值 1

    然后你打电话 ssh

    ssh调用的shell可以看到:

    until [[ 1 -eq 2 ]]; do 
       echo "Value of 'c' == 1"; c=2; 
       echo "1 - Incremented value: 2"; 
       if [[ 1 -gt 5 ]]; then break; fi; 
       sleep 2; 
       echo; 
    done;