セミコロンやブレースの正しい組み合わせが思い付かない。私はこれをやりたいのですが、コマンドラインからのワンライナーとして:
while [ 1 ]
do
foo
sleep 2
done
while true; do foo; sleep 2; done
ちなみに、(表示しているように)プロンプトでそれを複数行として入力してから、上矢印で履歴を呼び出すと、正しく区切られた1行で表示されます。
$ while true
> do
> echo "hello"
> sleep 2
> done
hello
hello
hello
^C
$ <arrow up> while true; do echo "hello"; sleep 2; done
Whileの状態でsleepコマンドを使うことも可能です。ワンライナーをよりきれいに見せる.
while sleep 2; do echo thinking; done
コロンは常に「真」です:
while :; do foo; sleep 2; done
until
コマンドを利用することもできます。
until ((0)); do foo; sleep 2; done
while
とは対照的に、until
はテスト条件がゼロではない終了ステータスを持つ限り、ループの内側でコマンドを実行するでしょう。
while
ループを使う:
while read i; do foo; sleep 2; done < /dev/urandom
for
ループを使う:
for ((;;)); do foo; sleep 2; done
until
を使用する別の方法:
until [ ]; do foo; sleep 2; done
セミコロンを使用してステートメントを区切ることができます。
$ while [ 1 ]; do foo; sleep 2; done
非常に単純な無限ループ.. :)
while true ; do continue ; done
あなたの質問から:
while true; do foo ; sleep 2 ; done
WHILEステートメントにのみセミコロンを使い、ループに複数のことをさせるために&&演算子を使いたいのですが….
だから私はいつもこれのようにやる
while true ; do echo Launching Spaceship into orbit && sleep 5s && /usr/bin/launch-mechanism && echo Launching in T-5 && sleep 1s && echo T-4 && sleep 1s && echo T-3 && sleep 1s && echo T-2 && sleep 1s && echo T-1 && sleep 1s && echo liftoff ; done
単純なプロセス監視には、代わりにwatch
を使用してください。
Whileループをある条件の後で停止させ、この条件が満たされたときにfoo
コマンドがゼロ以外の値を返す場合は、ループを次のように中断させることができます。
while foo; do echo 'sleeping...'; sleep 5; done;
たとえば、foo
コマンドが一括してものを削除していて、削除するものがなくなったときに1を返します。
これは、何らかの状況が発生するまでコマンドを何度も実行する必要があるカスタムスクリプトがある場合にうまく機能します。条件が満たされたときに1
で終了し、再度実行されるときに0
で終了するようにスクリプトを作成します。
たとえば、データベース内の100行を更新し、更新するものがあればbatch_update.py
を、それ以上なければ0
を返すPythonスクリプト1
があるとします。次のコマンドでは、更新と更新の間に5秒間スリープしながら、一度に100行ずつ更新できます。
while batch_update.py; do echo 'sleeping...'; sleep 5; done;
私が2つの実用的な例を挙げることができるならば(少し「感情」で)。
これは、フォルダ "img"に ".jpg"で終わるすべてのファイルの名前を書き込みます。
for f in *; do if [ "${f#*.}" == 'jpg' ]; then echo $f; fi; done
これはそれらを削除します:
for f in *; do if [ "${f#*.}" == 'jpg' ]; then rm -r $f; fi; done
貢献しようとしているだけです。
あなたもこれを試すことができます。
while [[ 0 -ne 1 ]]; do echo "it's looping"; sleep 2; done
while
を使う:
while true; do echo 'while'; sleep 2s; done
for
ループを使う:
for ((;;)); do echo 'forloop'; sleep 2; done
Recursion
を使用する(上記とは少し異なりますが、キーボード割り込みでは停止しません)
list(){ echo 'recursion'; sleep 2; list; } && list;