ไวยากรณ์คือ:
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ปฏิบัติการ)