2012-07-15 5 views
10

こんにちは空のボディループを書きたいと思います。私はちょうどループカウンタを増やしたいので、IO操作なしでCPUがビジー状態に保たれるようにします。ここで私が書いたものですが、それは私にエラーを与える:空のボディLoop Linuxシェル

#!/bin/bash 
for (( i = 0 ; i <= 1000000; i++ )) 
do 
done 


[email protected]:~# ./forLoop 
./forLoop: line 4: syntax error near unexpected token `done' 
./forLoop: line 4: `done' 

答えて

23

ループ本体には、少なくとも1つのコマンドを指定する必要があります。

このような目的のための最良のコマンドは、コロンである:であり、一般にno-op shell commandとして使用されています。

+0

"これは、組み込みのシェルの同義語と考えられます。"これにより、これは以前のものと同じ答えになります。 ;) –

3

あなたは(それぞれ成功したか失敗した何もしない)trueまたはfalseのようなループの内部には、OPコマンドを入れることができませんでした。

これはタイトなループになり、CPUを焼き付けます。あなたが寒い午前中にあなたのコンピュータを温めたいのでない限り、単にi=1000000と言うだけでループと同じ効果があります。

達成しようとしていることは何ですか?

+0

NOPは "CPUを焼く"ことはありませんが、100%の使用率を示すかもしれませんが、熱出力はごくわずかです。あなたは実際にあなたのプロセッサーをウォームアップするために仕事をする必要があります。 – Thomas

+0

興味深い点。ループカウンタを増分しないでください。 –

+0

おそらく十分ではありませんが、プロセッサはループカウンタインクリメントの代わりにCMP/JNE命令でほとんどの時間を費やしています。しかし、ループ内のいくつかの算術命令はそれを行うべきです(いくつかの乗算/除算のように)。 – Thomas

1
#!/bin/bash 
let i=0 
while [[ $i -le 1000000 ]]; do 
    let i++ 
done 
0

x秒間遅延させる場合は、sleep xを使用できます。

+0

これにより、このループはビジー待機ループにはなりません。 –

関連する問題