Cú pháp là:
while
first list of commands
do
second list of commands
done
chạy danh sách lệnh thứ hai trong một vòng lặp miễn là danh sách lệnh đầu tiên (vì vậy lần chạy cuối cùng trong danh sách đó) là thành công.
Trong danh sách lệnh đầu tiên đó , bạn có thể sử dụng [
lệnh để thực hiện các loại thử nghiệm khác nhau hoặc bạn có thể sử dụng :
lệnh null không làm gì và trả về thành công hoặc bất kỳ lệnh nào khác.
while :; do cmd; done
Chạy đi chạy cmd
lại mãi mãi như :
luôn trả lại thành công. Đó là vòng lặp mãi mãi . Bạn có thể sử dụng true
lệnh thay thế để làm cho nó dễ đọc hơn:
while true; do cmd; done
Mọi người thường thích :
như :
là luôn luôn được xây dựng trong thời gian true
không (một thời gian dài trước đây, hầu hết vỏ đã true
được xây dựng trong ngày nay) ¹.
Các biến thể khác bạn có thể thấy:
while [ 1 ]; do cmd; done
Ở trên, chúng tôi đang gọi [
lệnh để kiểm tra xem chuỗi "1" có trống không (vì vậy luôn luôn đúng)
while ((1)); do cmd; done
Sử dụng ((...))
cú pháp Korn / bash / zsh để bắt chước while(1) { ...; }
C.
Hoặc những thứ phức tạp hơn như until false; do cmd; done
, until ! true
...
Đôi khi chúng được đặt bí danh như:
alias forever='while :; do'
Vì vậy, bạn có thể làm một cái gì đó như:
forever cmd; done
Ít người nhận ra rằng điều kiện này là một danh sách các lệnh. Chẳng hạn, bạn thấy mọi người viết:
while :; do
cmd1
cmd2 || break
cmd3
done
Khi họ có thể đã viết:
while
cmd1
cmd2
do
cmd3
done
Nó thực sự có ý nghĩa đối với nó là một danh sách vì bạn thường muốn làm những việc giống như while cmd1 && cmd2; do...; done
danh sách lệnh.
Trong mọi trường hợp, lưu ý rằng đó [
là một lệnh giống như bất kỳ lệnh nào khác (mặc dù được tích hợp sẵn trong các shell giống như Bourne hiện đại), nó không phải được sử dụng chỉ trong danh sách if
/ while
/ until
điều kiện và các danh sách điều kiện đó không có để sử dụng lệnh đó nhiều hơn bất kỳ lệnh nào khác.
¹ :
cũng ngắn hơn và chấp nhận đối số (mà nó bỏ qua). Trong khi hành vi của true
hoặc false
không được chỉ định nếu bạn vượt qua nó bất kỳ đối số. Vì vậy, người ta có thể làm ví dụ:
while : you wait; do
something
done
Nhưng, hành vi của:
until false is true; do
something
done
là không xác định (mặc dù nó sẽ hoạt động trong hầu hết các shell / false
hiện thực).
:
không làm gì ngoài việc luôn thoát với mã trả về 0. Vì vậy, nó cũng giống như vậywhile true
(giả sử hệ thống của bạn có mộttrue
tệp thực thi).