2012-07-15 24 views
10

Ciao Voglio scrivere e svuotare il loop del corpo. Voglio solo incrementare il contatore di loop, quindi voglio che la cpu rimanga occupata senza alcuna operazione di IO. Ecco quello che ho scritto, ma mi dà un errore:Corpo vuoto per shell Linux Loop

#!/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' 

risposta

23

È necessario specificare almeno un comando in un corpo del loop.

Il miglior comando per tali scopi è il due punti :, comunemente usato come no-op shell command.

+0

"Può essere considerato un sinonimo per la shell builtin true." - questo rende questa risposta uguale a quella precedente. ;) –

3

Si potrebbe mettere un comando non op all'interno del ciclo come true o false (non fare nulla con o senza successo, rispettivamente).

Questo sarà un ciclo stretto e brucerà CPU. A meno che non desideri riscaldare il computer in una mattinata fredda, puoi semplicemente dire i=1000000 e avere lo stesso effetto del ciclo.

Che cosa stai cercando di raggiungere?

+0

Un NOP non "brucerà CPU", potrebbe mostrare un utilizzo del 100% ma produrrà una produzione di calore trascurabile. Devi effettivamente lavorare per scaldare il tuo processore. – Thomas

+0

Punto interessante. Non funzionerebbe il ciclo di incremento del ciclo? –

+0

Probabilmente non è sufficiente, il processore trascorrerà la maggior parte del tempo nelle istruzioni CMP/JNE anziché con l'incremento del ciclo di loop. Ma alcune istruzioni aritmetiche nel ciclo dovrebbero farlo (come alcune moltiplicazioni/divisioni). – Thomas

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

È possibile utilizzare sleep x se si desidera ritardare per x numero di secondi.

+0

Ciò non farà in modo che questo ciclo sia un ciclo di attesa-occupato. –