Unix / Linux - การควบคุมเชลล์ลูป
ในบทนี้เราจะพูดถึงการควบคุมวงรอบเปลือกใน Unix จนถึงตอนนี้คุณได้ดูการสร้างลูปและทำงานกับลูปเพื่อทำงานต่าง ๆ ให้สำเร็จ บางครั้งคุณต้องหยุดการวนซ้ำหรือข้ามการวนซ้ำ
ในบทนี้เราจะเรียนรู้ต่อไปนี้สองคำสั่งที่ใช้ในการควบคุมเชลล์ลูป −
break คำให้การ
continue คำให้การ
ห่วงที่ไม่มีที่สิ้นสุด
ลูปทั้งหมดมีอายุการใช้งาน จำกัด และจะออกมาเมื่อเงื่อนไขเป็นเท็จหรือจริงขึ้นอยู่กับลูป
การวนซ้ำอาจดำเนินต่อไปตลอดกาลหากไม่ตรงตามเงื่อนไขที่ต้องการ ลูปที่ดำเนินการตลอดไปโดยไม่ยุติการดำเนินการเป็นจำนวนครั้งไม่สิ้นสุด ด้วยเหตุนี้ลูปดังกล่าวจึงเรียกว่าลูปไม่มีที่สิ้นสุด
ตัวอย่าง
นี่คือตัวอย่างง่ายๆที่ใช้ไฟล์ while วนซ้ำเพื่อแสดงตัวเลขศูนย์ถึงเก้า -
#!/bin/sh
a=10
until [ $a -lt 10 ]
do
echo $a
a=`expr $a + 1`
done
วนซ้ำนี้ตลอดไปเพราะ a ตลอดเวลา greater than หรือ equal to 10 และต้องไม่น้อยกว่า 10
คำชี้แจงการแบ่ง
breakคำสั่งใช้เพื่อยุติการดำเนินการของลูปทั้งหมดหลังจากเสร็จสิ้นการดำเนินการทุกบรรทัดของโค้ดจนถึงคำสั่ง break จากนั้นจะลดขั้นตอนลงไปที่โค้ดหลังจากสิ้นสุดลูป
ไวยากรณ์
ดังต่อไปนี้ break คำสั่งใช้เพื่อออกมาจากลูป -
break
คำสั่ง break ยังสามารถใช้เพื่อออกจากลูปที่ซ้อนกันโดยใช้รูปแบบนี้ -
break n
ที่นี่ n ระบุไฟล์ nth ล้อมรอบไปยังทางออกจาก
ตัวอย่าง
นี่คือตัวอย่างง่ายๆที่แสดงให้เห็นว่าลูปสิ้นสุดทันทีที่ a กลายเป็น 5 -
#!/bin/sh
a=0
while [ $a -lt 10 ]
do
echo $a
if [ $a -eq 5 ]
then
break
fi
a=`expr $a + 1`
done
เมื่อดำเนินการคุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
0
1
2
3
4
5
นี่คือตัวอย่างง่ายๆของการซ้อนสำหรับลูป สคริปต์นี้แตกออกจากทั้งสองลูป ifvar1 equals 2 และ var2 equals 0 -
#!/bin/sh
for var1 in 1 2 3
do
for var2 in 0 5
do
if [ $var1 -eq 2 -a $var2 -eq 0 ]
then
break 2
else
echo "$var1 $var2"
fi
done
done
เมื่อดำเนินการคุณจะได้รับผลลัพธ์ดังต่อไปนี้ ในวงในคุณมีคำสั่ง break พร้อมอาร์กิวเมนต์ 2 สิ่งนี้บ่งชี้ว่าหากตรงตามเงื่อนไขคุณควรแยกออกจากวงนอกและท้ายที่สุดก็ออกจากวงในด้วยเช่นกัน
1 0
1 5
คำสั่งดำเนินการต่อ
continue คำสั่งคล้ายกับ break คำสั่งยกเว้นว่าจะทำให้การวนซ้ำปัจจุบันของลูปออกแทนที่จะเป็นลูปทั้งหมด
คำสั่งนี้มีประโยชน์เมื่อเกิดข้อผิดพลาด แต่คุณต้องการพยายามดำเนินการวนซ้ำครั้งถัดไปของลูป
ไวยากรณ์
continue
เช่นเดียวกับคำสั่ง break อาร์กิวเมนต์จำนวนเต็มสามารถมอบให้กับคำสั่งต่อเพื่อข้ามคำสั่งจากลูปที่ซ้อนกัน
continue n
ที่นี่ n ระบุไฟล์ nth ล้อมรอบเพื่อดำเนินการต่อจาก
ตัวอย่าง
ลูปต่อไปนี้ใช้ประโยชน์จากไฟล์ continue คำสั่งที่ส่งกลับจากคำสั่งดำเนินการต่อและเริ่มประมวลผลคำสั่งถัดไป -
#!/bin/sh
NUMS="1 2 3 4 5 6 7"
for NUM in $NUMS
do
Q=`expr $NUM % 2`
if [ $Q -eq 0 ]
then
echo "Number is an even number!!"
continue
fi
echo "Found odd number"
done
เมื่อดำเนินการคุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number