วิธีการใช้ BASH "for" loop ในเชลล์สคริปต์
BASH (ซึ่งย่อมาจาก Bourne Again Shell) เป็นภาษาสคริปต์ที่ใช้โดย ระบบปฏิบัติการลีนุกซ์ และยูนิกซ์มากที่สุด
คุณสามารถเรียกใช้คำสั่ง BASH ภายในหน้าต่างเทอร์มินัลได้จากเมนูอื่นหรือคุณสามารถเพิ่มคำสั่งลงในไฟล์ข้อความเพื่อสร้างสคริปต์เชลล์ได้
สิ่งที่ยอดเยี่ยมเกี่ยวกับการเขียนสคริปต์ของเชลล์คือคุณสามารถเรียกใช้สคริปต์เหล่านี้ได้อีกครั้งและอีกครั้ง ตัวอย่างเช่นคุณต้องเพิ่มผู้ใช้ลงในระบบตั้งค่าสิทธิ์และจัดการสภาพแวดล้อมเริ่มต้น คุณสามารถเขียนคำสั่งลงบนแผ่นกระดาษและเรียกใช้งานตามที่คุณเพิ่มผู้ใช้ใหม่หรือคุณสามารถเขียนสคริปต์เพียงครั้งเดียวและเพิ่งส่งผ่านพารามิเตอร์ลงในสคริปต์นั้น
การเขียนสคริปต์ภาษาต่างๆเช่น BASH มีการเขียนโปรแกรมที่คล้ายกันเป็นภาษาอื่น ๆ ตัวอย่างเช่นคุณสามารถใช้พารามิเตอร์การนำเข้าเพื่อ รับข้อมูลจากแป้นพิมพ์ และเก็บไว้เป็นตัวแปร จากนั้นคุณจะได้รับสคริปต์เพื่อ ดำเนินการบางอย่างตามค่าของพารามิเตอร์อินพุท
ส่วนสำคัญของการเขียนโปรแกรมและภาษาสคริปต์คือความสามารถในการเรียกใช้โค้ดชิ้นเดียวกันซ้ำ ๆ กัน
มีหลายวิธีที่จะทำซ้ำรหัส (หรือที่เรียกว่าลูป) ในคู่มือนี้คุณจะเห็นวิธีการเขียนลูป "for"
ลูป สำหรับการ ทำซ้ำส่วนหนึ่งของรหัสซ้ำแล้วซ้ำอีก พวกเขามีประโยชน์เพื่อให้ชุดของคำสั่งสามารถทำงานต่อไปได้จนกว่าจะมีเงื่อนไขเฉพาะที่จะได้พบหลังจากที่พวกเขาจะหยุด
ในคู่มือนี้คุณจะได้รับห้าวิธีในการใช้ลูปสำหรับภายในสคริปต์ BASH
ก่อนที่จะเริ่มต้นใช้งาน
ก่อนที่คุณจะเริ่มต้นใช้งานตัวอย่างลูปสำหรับลูปคุณต้องเปิดหน้าต่างเทอร์มินัลและทำตามขั้นตอนต่อไปนี้:
- ป้อน สคริปต์ mkdir ( เรียนรู้เพิ่มเติมเกี่ยวกับ mkdir ที่นี่ )
- ป้อน สคริปต์ cd (ซึ่ง จะเปลี่ยนไดเรกทอรี ไปเป็น สคริปต์ )
- ป้อน examplen.sh nano (โดย n คือตัวอย่างที่คุณกำลังทำงานอยู่)
- ป้อนสคริปต์
- กด CTRL + O เพื่อบันทึกและ CTRL + X เพื่อออก
- เรียกใช้ bash examplen.sh (อีกครั้งโดย n เป็นตัวอย่างที่คุณกำลังทำงานด้วย)
วิธีวนผ่านรายการ
#! / bin / ทุบตี
สำหรับเลขที่ 1 2 3 4 5
ทำ
echo $ number
เสร็จแล้ว
ทางออกที่ 0
วิธี BASH ในการใช้ลูป "for" มีความแตกต่างกันไปบ้างกับการเขียนโปรแกรมและภาษาสคริปต์ส่วนใหญ่จะจัดการกับ "for" loops ลองแบ่งสคริปต์ลง ...
ใน BASH "for" loop ทั้งหมดคำสั่งระหว่าง ทำ และ done จะทำขึ้นหนึ่งครั้งสำหรับทุกรายการในรายการ
ในตัวอย่างข้างต้นรายการคือทุกสิ่งทุกอย่างที่มาหลังจากคำ ใน (เช่น 1 2 3 4 5)
แต่ละครั้งที่วนซ้ำ iterates ค่าถัดไปในรายการถูกแทรกลงในตัวแปรที่ระบุหลังจากคำว่า "for" ในลูปข้างต้นตัวแปรเรียกว่า หมายเลข
คำสั่ง echo ถูกใช้เพื่อแสดงข้อมูลไปยังหน้าจอ
ดังนั้นตัวอย่างนี้ใช้ตัวเลขตั้งแต่ 1 ถึง 5 และส่งผลให้ทีละหน้าไปยังหน้าจอ:
- 1
- 2
- 3
- 4
- 5
วิธีวนรอบระหว่างจุดเริ่มต้นและจุดสิ้นสุด
ปัญหาเกี่ยวกับตัวอย่างข้างต้นก็คือถ้าคุณต้องการประมวลผลรายการที่ใหญ่กว่า (พูด 1 ถึง 500) จะใช้เวลานานในการพิมพ์ตัวเลขทั้งหมดในครั้งแรก
ซึ่งจะนำเราไปสู่ตัวอย่างที่สองซึ่งจะแสดงวิธีการระบุจุดเริ่มต้นและจุดสิ้นสุด:
#! / bin / ทุบตี
จำนวน {1..10}
ทำ
echo "$ number"
เสร็จแล้ว
ทางออกที่ 0
กฎมีพื้นฐานเหมือนกัน ค่าหลังจากคำว่า " in" สร้างรายชื่อเพื่อทำซ้ำผ่านและแต่ละค่าในรายการจะถูกวางไว้ในตัวแปร (เช่นหมายเลข) และทุกครั้งที่วนซ้ำ iterates งบระหว่าง ทำ และ เสร็จ จะดำเนินการ
ความแตกต่างหลักคือวิธีการสร้างรายการ วงเล็บปีกกา {} จะหมายถึงช่วงและช่วงในกรณีนี้คือ 1 ถึง 10 (จุดทั้งสองจุดจะแยกจุดเริ่มต้นและจุดสิ้นสุดของช่วง)
ตัวอย่างนี้จึงวิ่งผ่านแต่ละหมายเลขระหว่าง 1 ถึง 10 และแสดงผลหมายเลขไปยังหน้าจอดังนี้:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
ลูปเดียวกันสามารถเขียนได้เช่นนี้โดยมี ไวยากรณ์ เหมือนกับตัวอย่างแรก:
สำหรับเลขที่ 1 2 3 4 5 6 7 8 9 10
วิธีการข้ามเบอร์ในช่วง
ตัวอย่างก่อนหน้าแสดงวิธีการวนรอบระหว่างจุดเริ่มต้นและจุดสิ้นสุดดังนั้นตอนนี้เราจะดูวิธีข้ามตัวเลขในช่วง
ลองจินตนาการว่าคุณต้องการวนรอบตั้งแต่ 0 ถึง 100 แต่แสดงเฉพาะทุกหมายเลขที่สิบ สคริปต์ต่อไปนี้แสดงวิธีการทำเพียงว่า:
#! / bin / ทุบตี
สำหรับตัวเลขใน {0..100..10}
ทำ
echo "$ number"
เสร็จแล้ว
ทางออกที่ 0
กฎมีพื้นฐานเหมือนกัน มีรายการตัวแปรและชุดคำสั่งที่จะทำระหว่าง ทำ และ ทำ รายการในครั้งนี้มีลักษณะดังนี้: {0..100..10}
หมายเลขแรกคือ 0 และเลขท้ายคือ 100 หมายเลขที่สาม (10) คือจำนวนรายการในรายการที่จะข้าม
ตัวอย่างข้างต้นแสดงผลลัพธ์ต่อไปนี้:
- 0
- 10
- 20
- 30
- 40
- 50
- 60
- 70
- 80
- 90
- 100
ค้นหาแบบวนซ้ำมากขึ้น
วิธี BASH ในการเขียนลูปจะแปลกเล็กน้อยเมื่อเทียบกับภาษาโปรแกรมอื่น ๆ
อย่างไรก็ตามคุณสามารถเขียนลูปสำหรับรูปแบบที่คล้ายคลึงกับภาษาการเขียนโปรแกรม C เช่นนี้
#! / bin / ทุบตี
for ((number = 1; number <100; number ++))
{
if (($ number% 5 == 0))
แล้วก็
echo "จำนวน $ หารด้วย 5"
Fi
}
ทางออกที่ 0
ลูปเริ่มต้นด้วยการตั้งค่าตัวแปรจำนวนเป็น 1 (number = 1 ) ลูปจะทำให้ iterating ในขณะที่ค่าของจำนวนน้อยกว่า 100 ( number <100 ) ค่าของ จำนวนที่ เปลี่ยนแปลงโดยเพิ่ม 1 ลงในแต่ละครั้งที่ทำซ้ำ ( จำนวน ++ )
ทุกอย่างระหว่างวงเล็บปีกกาจะดำเนินการผ่านการวนซ้ำแต่ละรอบ
บิตระหว่างวงเล็บจะตรวจสอบค่าของ ตัวเลข หารด้วย 5 และเปรียบเทียบส่วนที่เหลือเป็น 0 หากส่วนที่เหลือเป็น 0 จำนวนนั้นจะหารด้วย 5 และจะปรากฏบนหน้าจอ
ตัวอย่างเช่น:
- 5 หารด้วย 5
- 10 หารด้วย 5
- 15 หารด้วย 5
ถ้าคุณต้องการเปลี่ยนขนาดขั้นตอนของการวนซ้ำคุณสามารถแก้ไขหมายเลข ++ เป็น หมายเลข = จำนวน + 2 จำนวน = ตัวเลข + 5 หรือ หมายเลข = จำนวน + 10 เป็นต้น
จำนวนนี้สามารถลดลงเป็น จำนวน + = 2 หรือ จำนวน + = 5
ตัวอย่างการปฏิบัติ
สำหรับลูปสามารถทำมากกว่าการวนซ้ำรายการของตัวเลข คุณสามารถใช้ผลลัพธ์ของคำสั่งอื่น ๆ ตามรายการได้
ตัวอย่างต่อไปนี้แสดงวิธีการแปลงไฟล์เสียงจาก MP3 เป็น WAV :
#! / bin / ทุบตี
รายการในตัวอย่างนี้คือทุกไฟล์ที่มีนามสกุล .MP3 ในโฟลเดอร์ปัจจุบันและตัวแปรเป็น ไฟล์
คำสั่ง mpg แปลงไฟล์ MP3 เป็น WAV อย่างไรก็ตามคุณอาจจำเป็นต้องติดตั้งโดยใช้ตัวจัดการแพคเกจของคุณก่อน