この簡単なガイドでは、Linuxで成功するまでコマンドを繰り返す方法を学習します。これは多くの場合に役立ちます。たとえば、この方法を使用して、2つ以上のホスト間のネットワーク接続を確認したり、インターネット接続をチェックして、まだオンラインかオフラインかを確認できます。したがって、理由が何であれ、Linuxコマンドまたはプログラムを正常に終了するまで繰り返したい場合は、このガイドが役立ちます。
Linuxで成功するまでコマンドを繰り返します
コマンドのリストを繰り返し実行するには、次のBASHループ構造を使用します。 :
- ループ中
- ループするまで。
ループ中 コードのブロックを実行します( do ... doneで囲まれています )条件が trueの場合 条件がfalse になるまで、それを実行し続けます 。条件がfalseになると 、whileループは終了します。
ループまで Whileループの正反対です。コードのブロックを実行します( do ... doneで囲まれています )条件が falseの場合 条件がtrue になるまで、それを実行し続けます 。条件がtrueになると 、untilループが終了します。
まず、Whileループを使用して成功するまでLinuxコマンドまたはプログラムを繰り返す方法を見てみましょう。
1。 Whileループを使用して成功するまでコマンドを繰り返します
次のコマンドを見てください:
$ while ! ping -c 3 ostechnix.com ; do sleep 2 ; done ; xcalc
このコマンドは、ostechnix.comサイトへのpingを続行します。サイトがオンラインになると、Whileループが終了し、 "xcalc"が表示されます。 プログラム。ここで、xcalcはオプションです。通知のみを目的としています。それ以外の場合は、コマンドが成功したかどうかを確認するために、ターミナルウィンドウをチェックし続ける必要がある場合があります。
説明:
上記のコマンドを分解して、各ステートメントの機能を見てみましょう。
while ! ping -c 3 ostechnix.com ;
これは条件文です。このステートメントでわかるように、pingコマンドの前に!を付けました。 キャラクター。 「NOT」として機能します 調子。したがって、上記の行の実際の意味は次のとおりです-ostechnix.comにpingを実行することはできません 。
do sleep 2 ; done ;
ステートメント "do sleep 2" 、は、毎秒pingコマンドを繰り返し試行してシステムをハンマーで叩かないことを示します。システムに少し(たとえば2秒)待ってから、ostechnix.comにpingを実行するように指示します。つまり、Whileコマンドは2秒ごとにサイトにpingを送信し続けます。条件がfalseになると、whileループは終了します。
xcalc ;
xcalcプログラムを実行します。このプログラムは、前のコマンドが正常に実行された後にのみ実行されます。
したがって、上記のコマンドのように、条件が真の場合(つまり、ostechnix.comが「到達不能」の場合)、 do ... doneで囲まれたコードのブロックが実行されます。 。ここでは、コードは「sleep2」です。そのため、2秒間待機してから、サイトへのpingを再試行します。条件が偽になるまでそれを実行し続けます。条件がfalseになると(つまり、ostechnix.comに到達できる場合)、ループは終了し、最後にxcalcプログラムが開きます。
上記のコマンドの出力例は次のとおりです。
ping: ostechnix.com: Name or service not known ping: ostechnix.com: Name or service not known ping: ostechnix.com: Name or service not known ping: ostechnix.com: Name or service not known ping: ostechnix.com: Name or service not known ping: ostechnix.com: Name or service not known ping: ostechnix.com: Name or service not known ping: ostechnix.com: Name or service not known ping: ostechnix.com: Name or service not known ping: ostechnix.com: Name or service not known ping: ostechnix.com: Name or service not known ping: ostechnix.com: Name or service not known PING ostechnix.com (104.26.5.40) 56(84) bytes of data. 64 bytes from 104.26.5.40 (104.26.5.40): icmp_seq=1 ttl=55 time=63.6 ms 64 bytes from 104.26.5.40 (104.26.5.40): icmp_seq=2 ttl=55 time=84.8 ms 64 bytes from 104.26.5.40 (104.26.5.40): icmp_seq=3 ttl=55 time=79.9 ms --- ostechnix.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2001ms rtt min/avg/max/mdev = 63.602/76.114/84.810/9.068 ms Warning: Cannot convert string "-adobe-symbol-*-*-*-*-*-120-*-*-*-*-*-*" to type FontStruct
2。までループを使用して成功するまでコマンドを繰り返します
以下のように「Until」ループを使用してこれを行うこともできます。
$ until ping -c 3 ostechnix.com ; do sleep 2 ; done ; xcalc
このコマンドを分解して、各ステートメントの機能を見てみましょう。
until ping -c 3 ostechnix.com ;
これは条件文です。つまり、サイトに到達できるまでpingを実行します。
do sleep 2 ; done ;
サイトに到達できるようになるまで、2秒ごとにサイトにpingを実行してみてください。条件が真になると、つまりサイトに到達できるようになると、ループは終了します。
xcalc
xcalcプログラムを実行します。以前のコマンドが正常に実行された場合にのみ実行されます。
したがって、上記のコマンドに従って、Untilループは成功するまでostechnix.comにpingを送信し続けます。サイトにアクセスできるようになると、untilループが終了し、xcalcプログラムが開きます。
関連記事:
- X秒ごとにLinuxコマンドを実行する方法
3。成功するまで前のコマンドを繰り返します
Linuxコマンドが正常に終了するまでの方法がわかりました。前のコマンドはどうですか?成功するまで、前のコマンドをどのように繰り返したり、再試行したりしますか?それも簡単です!
最後のコマンドを繰り返すためのさまざまな方法をすでに投稿しています。方法がわからない場合は、次のガイドを参照してください。
- Linuxで最後のコマンドを繰り返すさまざまな方法
上記のリンクに記載されているように、最後に実行されたコマンドを実行するには、二重感嘆符と入力するだけです。 、次のようにEnterキーを押します:
$ !!
これにより、最後のコマンドが実行されます。
したがって、Whileループを使用して成功するまで前のコマンドを繰り返したい場合は、次のコマンドを実行します。
$ !!; while [ $? -ne 0 ]; do !!; done
までループを使用して成功するまで前のコマンドを繰り返すには、次のコマンドを実行します。
$ until !!; do :; done
BashのWhileループとUntilループのその他の例については、次のガイドを参照してください。
- Bashスクリプティング-ループが例で説明されている間とまで