Skip to main content

Linux Shell Script ตัวอย่างของ BASH 'for' Loop

Absolute and Relative Paths (เมษายน 2025)

Absolute and Relative Paths (เมษายน 2025)
Anonim

BASH (ซึ่งย่อมาจาก Bourne Again Shell) เป็นภาษาสคริปต์ที่ใช้โดยระบบปฏิบัติการลีนุกซ์และยูนิกซ์มากที่สุด

คุณสามารถเรียกใช้คำสั่ง BASH ภายในหน้าต่างเทอร์มินัลได้จากเมนูอื่นหรือคุณสามารถเพิ่มคำสั่งลงในไฟล์ข้อความเพื่อสร้างสคริปต์เชลล์ได้

สิ่งที่ยอดเยี่ยมเกี่ยวกับการเขียนสคริปต์ของเชลล์คือคุณสามารถเรียกใช้สคริปต์เหล่านี้ได้อีกครั้งและอีกครั้ง ตัวอย่างเช่นคุณต้องเพิ่มผู้ใช้ลงในระบบตั้งค่าสิทธิ์และจัดการสภาพแวดล้อมเริ่มต้น คุณสามารถเขียนคำสั่งลงบนแผ่นกระดาษและเรียกใช้งานตามที่คุณเพิ่มผู้ใช้ใหม่หรือคุณสามารถเขียนสคริปต์เพียงครั้งเดียวและเพิ่งส่งผ่านพารามิเตอร์ลงในสคริปต์นั้น

การเขียนสคริปต์ภาษาต่างๆเช่น BASH มีการเขียนโปรแกรมที่คล้ายกันเป็นภาษาอื่น ๆ ตัวอย่างเช่นคุณสามารถใช้พารามิเตอร์การนำเข้าเพื่อรับข้อมูลจากแป้นพิมพ์และเก็บไว้เป็นตัวแปร จากนั้นคุณจะได้รับสคริปต์เพื่อดำเนินการบางอย่างตามค่าของพารามิเตอร์อินพุท

ส่วนสำคัญของการเขียนโปรแกรมและภาษาสคริปต์คือความสามารถในการเรียกใช้โค้ดชิ้นเดียวกันซ้ำ ๆ กัน

มีหลายวิธีที่จะทำซ้ำรหัส (หรือที่เรียกว่าลูป) ในคู่มือนี้คุณจะเห็นวิธีการเขียนลูป "for"

สำหรับ loop ซ้ำบางส่วนของรหัสซ้ำแล้วซ้ำอีก พวกเขามีประโยชน์เพื่อให้ชุดของคำสั่งสามารถทำงานต่อไปได้จนกว่าจะมีเงื่อนไขเฉพาะที่จะได้พบหลังจากที่พวกเขาจะหยุด

ในคู่มือนี้คุณจะได้รับห้าวิธีในการใช้ลูปสำหรับภายในสคริปต์ BASH

ก่อนที่จะเริ่มต้นใช้งาน

ก่อนที่คุณจะเริ่มต้นใช้งานตัวอย่างลูปสำหรับลูปคุณต้องเปิดหน้าต่างเทอร์มินัลและทำตามขั้นตอนต่อไปนี้:

  1. เข้าสู่ สคริปต์ mkdir (เรียนรู้เพิ่มเติมเกี่ยวกับ mkdir ที่นี่)

  2. เข้าสู่ สคริปต์ cd (ซึ่งจะเปลี่ยนไดเรกทอรีไปที่ สคริปต์ ).

  3. เข้าสู่ examplen.sh nano (ในกรณีที่ n เป็นตัวอย่างที่คุณกำลังทำงานอยู่)

  4. ป้อนสคริปต์

  5. กด CTRL + O เพื่อบันทึกและ CTRL + X เพื่อออก

  6. วิ่ง bash examplen.sh (อีกครั้งด้วย n เป็นตัวอย่างที่คุณกำลังทำงานด้วย)

วิธีวนผ่านรายการ

#! / bin / bashfor number ใน 1 2 3 4 5doecho $ numberdoneexit 0

วิธี BASH ในการใช้ลูป "for" มีความแตกต่างกันไปบ้างกับการเขียนโปรแกรมและภาษาสคริปต์ส่วนใหญ่จะจัดการกับ "for" loops ลองถอดสคริปต์ลง

ใน BASH "for" loop ทั้งหมดข้อความระหว่าง ทำ และ เสร็จแล้ว จะดำเนินการหนึ่งครั้งสำหรับทุกรายการในรายการ

ในตัวอย่างข้างต้นรายการคือทุกสิ่งทุกอย่างที่อยู่หลังคำ ใน (เช่น 1 2 3 4 5)

แต่ละครั้งที่วนซ้ำ iterates ค่าถัดไปในรายการถูกแทรกลงในตัวแปรที่ระบุหลังคำ "สำหรับ" . ในลูปข้างต้นเรียกว่าตัวแปร จำนวน .

คำสั่ง echo ถูกใช้เพื่อแสดงข้อมูลไปยังหน้าจอ

ดังนั้นตัวอย่างนี้ใช้ตัวเลขตั้งแต่ 1 ถึง 5 และส่งผลให้ทีละหน้าไปยังหน้าจอ:

  • 1
  • 2
  • 3
  • 4
  • 5

วิธีวนรอบระหว่างจุดเริ่มต้นและจุดสิ้นสุด

ปัญหาเกี่ยวกับตัวอย่างข้างต้นก็คือถ้าคุณต้องการประมวลผลรายการที่ใหญ่กว่า (พูด 1 ถึง 500) จะใช้เวลานานในการพิมพ์ตัวเลขทั้งหมดในครั้งแรก

ซึ่งจะนำเราไปสู่ตัวอย่างที่สองซึ่งจะแสดงวิธีการระบุจุดเริ่มต้นและจุดสิ้นสุด:

#! / bin / bashfor number ใน {1..10} doecho "$ number" doneexit 0

กฎมีพื้นฐานเหมือนกัน ค่าหลังจากคำว่า " ใน" ทำรายการเพื่อย้ำผ่านและแต่ละค่าในรายการจะอยู่ในตัวแปร (เช่นจำนวน) และทุกครั้งที่ลูป 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 / bashfor number ใน {0..100..10} doecho "$ number" doneexit 0

กฎมีพื้นฐานเหมือนกัน มีรายการตัวแปรและชุดคำสั่งที่จะทำระหว่าง ทำ และ เสร็จแล้ว . รายการในครั้งนี้มีลักษณะดังนี้: {0..100..10}

หมายเลขแรกคือ 0 และเลขท้ายคือ 100 หมายเลขที่สาม (10) คือจำนวนรายการในรายการที่จะข้าม

ตัวอย่างข้างต้นแสดงผลลัพธ์ต่อไปนี้:

  • 0
  • 10
  • 20
  • 30
  • 40
  • 50
  • 60
  • 70
  • 80
  • 90
  • 100

ค้นหาแบบวนซ้ำมากขึ้น

วิธี BASH ในการเขียนลูปจะแปลกเล็กน้อยเมื่อเทียบกับภาษาโปรแกรมอื่น ๆ

อย่างไรก็ตามคุณสามารถเขียนลูปสำหรับรูปแบบที่คล้ายคลึงกับภาษาการเขียนโปรแกรม C เช่นนี้

# / bin / bashfor (จำนวน = 1; จำนวน <100; จำนวน ++)) {if (($ number% 5 == 0)) thenecho "จำนวน $ หารด้วย 5" fi}

ลูปเริ่มต้นด้วยการตั้งค่าตัวแปรจำนวนเป็น 1 (จำนวน = 1 ) ลูปจะทำให้ iterating ในขณะที่ค่าของจำนวนน้อยกว่า 100 ( จำนวน <100 ) คุณค่าของ จำนวน เปลี่ยนแปลงโดยการเพิ่ม 1 เมื่อทำซ้ำแต่ละครั้ง ( จำนวน ++ ).

ทุกอย่างระหว่างวงเล็บปีกกาจะดำเนินการผ่านการวนซ้ำแต่ละรอบ

บิตระหว่างวงเล็บจะตรวจสอบค่าของ a จำนวน หารด้วย 5 และเปรียบเทียบส่วนที่เหลือเป็น 0 ถ้าส่วนที่เหลือเป็น 0 จำนวนนั้นจะหารด้วย 5 และจะแสดงบนหน้าจอ

ตัวอย่างเช่น:

  • 5 หารด้วย 5
  • 10 หารด้วย 5
  • 15 หารด้วย 5

ถ้าคุณต้องการเปลี่ยนขนาดขั้นตอนของการทำซ้ำคุณสามารถแก้ไขหมายเลข + + + ส่วนที่จะ จำนวน = จำนวน + 2 , จำนวน = จำนวน 5 + , หรือ จำนวน = จำนวน + 10 เป็นต้น

นี้สามารถลดลงไป จำนวน + = 2 หรือ จำนวน + = 5 .

ตัวอย่างการปฏิบัติ

สำหรับลูปสามารถทำมากกว่าการวนซ้ำรายการของตัวเลข คุณสามารถใช้ผลลัพธ์ของคำสั่งอื่น ๆ ตามรายการได้

ตัวอย่างต่อไปนี้แสดงวิธีการแปลงไฟล์เสียงจาก MP3 เป็น WAV:

#! / bin / ทุบตีสำหรับไฟล์ ./*.mp3dompg -w ./wavs/"${file}".wav "$ file" done

รายการในตัวอย่างนี้คือทุกไฟล์ที่มีนามสกุล .MP3 ในโฟลเดอร์ปัจจุบันและตัวแปรคือ a ไฟล์ .

MPG แปลงไฟล์ MP3 เป็น WAV อย่างไรก็ตามคุณอาจจำเป็นต้องติดตั้งโดยใช้ตัวจัดการแพคเกจของคุณก่อน