Bagaimana cara keluar dari loop di Bash?

150

Saya ingin menulis skrip Bash untuk memproses teks, yang mungkin memerlukan loop sementara.

Misalnya, loop sementara di C:

int done = 0;
while(1) {
  ...
  if(done) break;
}

Saya ingin menulis skrip Bash setara dengan itu. Tetapi apa yang biasanya saya gunakan dan seperti yang ditunjukkan oleh semua contoh klasik, adalah ini:

while read something;
do
...
done

Ini tidak menawarkan bantuan tentang bagaimana melakukan while(1){}dan break;, yang didefinisikan dengan baik dan banyak digunakan dalam C, dan saya tidak perlu membaca data untuk stdin.

Adakah yang bisa membantu saya dengan Bash setara dengan kode C di atas?

lulyon
sumber

Jawaban:

189

Itu tidak jauh berbeda bash.

done=0
while : ; do
  ...
  if [ "$done" -ne 0 ]; then
      break
  fi
done

:adalah perintah no-op; status keluarnya selalu 0, sehingga loop dijalankan hingga donediberi nilai bukan nol.


Ada banyak cara Anda bisa mengatur dan menguji nilai doneuntuk keluar dari loop; yang saya perlihatkan di atas harus berfungsi di shell yang kompatibel dengan POSIX.

chepner
sumber
Tidak apa-apa untuk digunakan donesebagai nama variabel? Itu kata kunci shell ... Agak membingungkan paling tidak.
Michael Dorst
59
while true ; do
    ...
    if [ something ]; then
        break
    fi
done
lurker
sumber