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

循环完成后终端脚本未中断

  •  0
  • XxnumbxX  · 技术社区  · 2 年前

    我试图写一个终端脚本;一旦成功,我想触发一个功能,当它失败时,我想发送一个警报。除非脚本成功运行,否则它会在“完成”之后继续运行命令;线不确定正确的语法或正确的书写方式。

    我只希望完成后的命令在失败时处理,而不是成功时处理。

    check_connection_wireguard(){
    n=0
    until [ "$n" -ge 1 ]
    do
       ping -c 1 $remoteIdrac &> /dev/null && echo 'Success' && break
       n=$((n+1))
       echo "Connection Failed Attempt" $n
       sleep 15
    done
    
       ssh $localIp wg-quick down $wireguardInterface
       ssh $localIp /usr/local/emhttp/webGui/scripts/notify -i alert -s \"Backup Remote Connection\" -d \"Backup Operation failed to connect\"
    }
    

    所以我用下面的代码解决了这个问题,只是添加了一个if语句,但我想知道是否有比下面更优雅的解决方案。

    check_connection_wireguard(){
    n=0
    until [ "$n" -ge 1 ]
    do
      ping -c 1 10.10.20.100 &> /dev/null && echo 'Success' && break
      n=$((n+1))
      echo "Connection Failed Attempt" $n
      sleep 15
    
        if [[ $n > 1 ]]; then
        ssh $localIp wg-quick down $wireguardInterface
        ssh $localIp /usr/local/emhttp/webGui/scripts/notify -i alert -s \"Backup Remote Connection\" -d \"Backup Operation failed to connect\"
        fi
    done
    
    
    }
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   tink    2 年前

    break 只会打破循环。你想要 return 要在成功时中断该功能,请执行以下操作:

    check_connection_wireguard(){
    n=0
    until [ "$n" -ge 1 ]
    do
       ping -c 1 $remoteIdrac &> /dev/null && echo 'Success' && return
       n=$((n+1))
       echo "Connection Failed Attempt" $n
       sleep 15
    done
    
       ssh $localIp wg-quick down $wireguardInterface
       ssh $localIp /usr/local/emhttp/webGui/scripts/notify -i alert -s \"Backup Remote Connection\" -d \"Backup Operation failed to connect\"
    }