Saya tahu apa itu while
loop. Namun, saya hanya melihatnya bekerja dengan:
while [condition]
while ![condition]
while TRUE (infinite loop)
Dimana pernyataan sesudahnya while
harus berupa TRUE
atau FALSE
.
Ada perintah builtin shell bernama :
. Ini digambarkan sebagai perintah dummy yang tidak melakukan apa-apa, tetapi saya tidak tahu apakah itu sama di sini, bahkan dapat TRUE
atau tidak FALSE
. Mungkin itu sesuatu yang berbeda, tetapi apa?
bash
shell-script
sharkant
sumber
sumber
:
tidak melakukan apa pun kecuali selalu keluar dengan kode kembali 0. Jadi, itu sama sajawhile true
(dengan asumsi sistem Anda memilikitrue
executable).:
perintah tidak pernah dieksekusi, itu tidak akan kembali 0. Tapi itu terlalu berlebihan menurut saya.Jawaban:
Sintaksnya adalah:
yang menjalankan daftar perintah kedua dalam satu lingkaran selama daftar perintah pertama (jadi yang terakhir dijalankan dalam daftar itu) berhasil.
Dalam daftar perintah pertama , Anda dapat menggunakan
[
perintah untuk melakukan berbagai macam tes, atau Anda dapat menggunakan:
perintah nol yang tidak melakukan apa pun dan mengembalikan kesuksesan, atau perintah lainnya.Berulang
cmd
-ulang selamanya karena:
selalu mengembalikan kesuksesan. Itu lingkaran selamanya . Anda bisa menggunakantrue
perintah itu untuk membuatnya lebih terbaca:Orang-orang dulu suka
:
seperti:
yang selalu dibangun sementaratrue
(tidak lama; sebagian besar shell telahtrue
dibangun saat ini) ¹.Varian lain yang mungkin Anda lihat:
Di atas, kami memanggil
[
perintah untuk menguji apakah string "1" tidak kosong (jadi selalu benar juga)Menggunakan
((...))
sintaks Korn / bash / zsh untuk meniruwhile(1) { ...; }
C.Atau yang lebih berbelit-belit seperti
until false; do cmd; done
,until ! true
...Itu kadang-kadang disebut sebagai:
Jadi Anda dapat melakukan sesuatu seperti:
Hanya sedikit orang yang menyadari bahwa kondisinya adalah daftar perintah. Misalnya, Anda melihat orang menulis:
Ketika mereka bisa menulis:
Masuk akal untuk menjadi daftar karena Anda sering ingin melakukan hal-hal seperti
while cmd1 && cmd2; do...; done
yang merupakan daftar perintah juga.Bagaimanapun, perhatikan bahwa itu
[
adalah perintah seperti yang lain (meskipun itu built-in di shell seperti Bourne modern), itu tidak harus digunakan hanya dalam daftarif
/while
/until
kondisi, dan daftar kondisi tersebut tidak memiliki untuk menggunakan perintah itu lebih dari perintah lainnya.¹
:
juga lebih pendek dan menerima argumen (yang diabaikannya). Sementara perilakutrue
ataufalse
tidak ditentukan jika Anda memberikan argumen apa pun. Jadi seseorang dapat melakukan misalnya:Tapi, perilaku dari:
tidak ditentukan (meskipun akan bekerja di sebagian besar shell /
false
implementasi).sumber
while :
adalah loop tak terbatas.:
hanya tidak melakukan apa pun (berhasil).Jadi jika Anda ingin shell Anda hang selamanya tanpa melakukan apa-apa, Anda dapat menuliskannya sebagai
Atau dalam satu baris dengan
;
bukan baris baru:while :; do :; done
while :
biasanya digunakan jika Anda ingin melakukan sesuatu berulang kali tanpa syarat khusus terlampir. Anda dapat menggunakancontinue
,break
pernyataan dalam loop untuk mengontrolnya atau untuk memindahkan kondisi ke akhir loop seperti sebuahdo ... while
konstruksi.sumber
Tidak, perintah di bagian kondisi bisa berupa perintah apa saja (*) . Semua perintah shell memiliki beberapa nilai balik, dan
while
loop (sertaif
syarat) mengambil nilai kembali nol sebagai "benar", dan semua yang lain sebagai "salah". (* atau daftar beberapa perintah, yang terakhir diperhitungkan)Adapun
:
, manual Bash memberi tahu dengan jelas apa status pengembalian itu:The
help
builtin bahkan lebih jelas:sumber
s/any command/any sequence of commands/
, seperti yang dijelaskan Stéphane.