ループが終わるまで1番出口

ループが終わるまで1番出口

bash以下は、リモートシステムでsshコマンドを実行しようとするUntilループスクリプトです。

n=0
until [ ${n} -ge 5 ]
do
   ssh -oStrictHostKeyChecking=no root@test "mkdir -p /test_dir" && break 
   n=$(($n+1))
   sleep 5
done

ループが成功せずに終了したら、終了1を実行したいと思います。

私はこの解決策を見つけました:

n=0
until [ ${n} -ge 5 ]
do
   ssh -oStrictHostKeyChecking=no root@test "mkdir -p /test_dir" && exit 0 
   n=$(($n+1))
   sleep 5
done
exit 1

正しい方法ですか?

ベストアンサー1

これは一つの方法です。

別の方法は次のとおりです。

until [ "$n" -ge 5 ] && exit 1; do
  ... && break
done
echo OK
exit 0

または:

while [ "$n" -lt 5 ] || exit; do
  ... && break
done

sshここでは、成功するまでコマンドを繰り返し、何度も試した後に停止したいようですが、次のようになります。

n=5
until
  ssh -oStrictHostKeyChecking=no root@test "mkdir -p /test_dir"
do
  n=$((n - 1))
  if [ "$n" -eq 0 ]; then
    echo >&2 giving up
    exit 1
  fi
done

echo OK
exit 0

もっと理解できるでしょう。

おすすめ記事