okatti-et14
@okatti-et14 (haton haton)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

初歩的なLinuxコマンドについて質問(whileとsleepの組み合わせ)

質問内容

下記のコマンドは無限スリープしているように思うのですが、構文的になぜ無限にスリープするのか教えていただけませんか?
パッと調べて出てくる構文と少し違いがあり、分かりません。。。
よろしくお願いします。

# while sleep 1; do :; done
0

1Answer

while 文の基本的な構文は以下の通りです。 while 文に入るとまず条件コマンドが実行され、終了ステータスが0ならコマンド1、コマンド2、……が順に実行されます。これを条件コマンドが0以外で終了するまで繰り返します。

while 条件コマンド; do
    コマンド1
    コマンド2
    ...
done

改行とセミコロンは置き換えることもできます。ご質問の while 文をわかりやすく変形すると以下になります。

while sleep 1; do
    :
done

ここで : はシェルの組み込みコマンドで、実行しても何も起きません。構文的に何かコマンドを書かなければいけないが特に実行したいコマンドがないときに使えます。また sleep 1 は常に終了ステータス0を返します。

よってご質問の while 文は1秒スリープし、何もしないコマンドを実行し、また1秒スリープし……を繰り返します。

0Like

Comments

  1. @okatti-et14

    Questioner

    @uasi
    ありがとうございました!

Your answer might help someone💌