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