ไวยากรณ์คือ:
while
first list of commands
do
second list of commands
done
ซึ่งรันรายการคำสั่งที่สองในลูปตราบใดที่รายการคำสั่งแรก (ดังนั้นการรันครั้งสุดท้ายในรายการนั้น) จะสำเร็จ
ในรายการคำสั่งแรกนั้นคุณสามารถใช้[
คำสั่งเพื่อทำการทดสอบชนิดต่าง ๆ หรือคุณสามารถใช้:
คำสั่ง null ที่ไม่ทำอะไรเลยและส่งคืนความสำเร็จหรือคำสั่งอื่น ๆ
while :; do cmd; done
ทำงานcmd
ซ้ำแล้วซ้ำอีกเป็น:
ผลตอบแทนที่ประสบความสำเร็จ นั่นคือการวนซ้ำตลอดไป คุณสามารถใช้true
คำสั่งแทนเพื่อให้อ่านง่ายขึ้น:
while true; do cmd; done
ผู้คนเคยชอบ:
ที่:
จะถูกสร้างขึ้นมาเสมอในขณะที่true
ไม่ใช่ (เมื่อนานมาแล้วหอยส่วนใหญ่มีอยู่แล้วtrue
ในปัจจุบัน) ¹
ตัวแปรอื่น ๆ ที่คุณอาจเห็น:
while [ 1 ]; do cmd; done
ด้านบนเรากำลังเรียก[
คำสั่งเพื่อทดสอบว่าสตริง "1" ไม่ว่างเปล่า (จริงเสมอเช่นกัน)
while ((1)); do cmd; done
การใช้((...))
ไวยากรณ์Korn / bash / zsh เพื่อเลียนแบบwhile(1) { ...; }
ของ C
หรือคนที่ซับซ้อนมากขึ้นชอบuntil false; do cmd; done
, until ! true
...
บางครั้งก็มีนามแฝงเช่น:
alias forever='while :; do'
ดังนั้นคุณสามารถทำสิ่งที่ชอบ:
forever cmd; done
มีคนไม่กี่คนที่รู้ว่าเงื่อนไขเป็นรายการคำสั่ง ตัวอย่างเช่นคุณเห็นคนเขียน:
while :; do
cmd1
cmd2 || break
cmd3
done
เมื่อพวกเขาสามารถเขียนได้:
while
cmd1
cmd2
do
cmd3
done
มันสมเหตุสมผลแล้วที่จะเป็นลิสต์ที่คุณมักจะต้องการทำสิ่งต่าง ๆwhile cmd1 && cmd2; do...; done
ซึ่งเป็นลิสต์คำสั่งด้วย
ไม่ว่าในกรณีใดก็ตามโปรดทราบว่า[
คำสั่งนี้เหมือนคำสั่งอื่น ๆ (แม้ว่ามันจะมีอยู่แล้วในเชลล์แบบบอร์นที่ทันสมัย) แต่ก็ไม่จำเป็นต้องใช้ในรายการif
/ while
/ until
เงื่อนไขเพียงอย่างเดียวและรายการเงื่อนไขเหล่านั้นไม่มี เพื่อใช้คำสั่งนั้นมากกว่าคำสั่งอื่น ๆ
¹ :
นั้นสั้นกว่าและยอมรับข้อโต้แย้ง (ซึ่งจะละเว้น) ในขณะที่พฤติกรรมของtrue
หรือfalse
ไม่ได้ระบุถ้าคุณผ่านมันโต้แย้งใด ๆ ดังนั้นหนึ่งอาจทำเช่น:
while : you wait; do
something
done
แต่พฤติกรรมของ:
until false is true; do
something
done
ไม่ได้ระบุ (แม้ว่าจะใช้งานได้ในเชลล์ / false
การนำไปใช้งานส่วนใหญ่)
:
ไม่ทำอะไรเลย แต่มักจะออกด้วยรหัสส่งคืน 0 ดังนั้นจึงเป็นเช่นเดียวกันคือwhile true
(สมมติว่าระบบของคุณมีการtrue
ปฏิบัติการ)