การเขียนโปรแกรมใน bash - ตอนที่ 3

ไปยัง ปลอดภัย ของเรา แนวคิด เราจะเรียนรู้ 2 เครื่องมือที่มีประโยชน์มากสำหรับการเขียนโปรแกรมที่ทำงานได้อย่างสมบูรณ์แบบใน Bash เรียนรู้การสร้าง ฟังก์ชั่น และกำหนด ท่อ อาจดูซับซ้อนในตอนแรก แต่เราจะได้เห็นความใหญ่โต ประโยชน์ ที่พวกเขาให้เรา

ท่อ

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

โดยทั่วไปจะรู้จักท่อโดยมีสัญลักษณ์ | ที่อนุญาตให้เชื่อมนิพจน์ แม้ว่าจะใช้เป็นค่าเริ่มต้น แต่ก็มีวิธีอื่นในการสร้างท่อ

ตัวอย่าง: พิมพ์ข้อความเคอร์เนลล่าสุด

#dmesg ช่วยให้คุณเห็นข้อความเคอร์เนลล่าสุดและไดรเวอร์ที่โหลด # ระหว่างการบูตระบบ tail พิมพ์ส่วนสุดท้ายของไฟล์หรือ #command

dmesg | หาง

แม้ว่าจะมีความซับซ้อนมากเท่าที่เราต้องการ แต่โครงสร้างพื้นฐานของไปป์ไลน์ก็อนุญาตให้ใช้ผลลัพธ์ของคำสั่งหนึ่งเป็นอินพุตสำหรับคำสั่งถัดไปซึ่งสามารถให้อินพุตสำหรับคำสั่งใหม่ได้หากเราเพิ่มไปป์ต่อเนื่องกัน

ฟังก์ชั่น

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

บางทีสิ่งที่สำคัญที่สุดเกี่ยวกับฟังก์ชันคือความเป็นไปได้ในการส่งผ่านพารามิเตอร์ข้อมูลที่พวกเขาจะใช้ในการประมวลผลและสร้างผลลัพธ์ โครงสร้างมีดังนี้:

function function-name {

กระบวนการ

}

ตัวอย่าง: ฟังก์ชันที่แสดงบริการที่ทำงานบนโปรโตคอล tcp นอกจากนี้เรายังสามารถดูวิธีการใช้ท่อเพิ่มเติม

# เรากำหนดชื่อฟังก์ชันสามารถเป็นชื่อที่เราชอบได้

function services_tcp {

#cat เชื่อมต่อและแสดงเนื้อหาของโฟลเดอร์ / etc / services ซึ่งเป็น # ที่มีบริการทั้งหมดที่มีพอร์ตที่เกี่ยวข้อง

# grep แรกรับรายการและลบความคิดเห็นโดยที่ –v เราจะเปลี่ยนผลลัพธ์

# grep ที่สองแสดงเฉพาะที่เกี่ยวข้องกับ tcp

แมว / etc / services | grep –v "^ #" | grep tcp

}

เมื่อเราต้องการเรียกใช้ฟังก์ชันนี้เราก็ต้องเรียกมันด้วยชื่อ:

tcp_services

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

ตัวอย่าง: ฟังก์ชันที่มีพารามิเตอร์อินพุตที่คำนวณผลรวมของตัวเลข 2 ตัว

#! / bin / ทุบตี
ผลรวมฟังก์ชัน ()
{
# ด้วยให้เราสามารถดำเนินการภายในเครื่องหมายคำพูด
ให้ "result = $ 1 + $ 2"

#return อนุญาตให้ส่งคืนค่าจำนวนเต็ม เมื่อดำเนินการส่งคืนค่าจะถูกฝากไว้ในตัวแปร $?
ส่งคืนผลลัพธ์ $;
}
 
# ฟังก์ชัน sum ถูกเรียกและเราส่งพารามิเตอร์อินพุต 2 ตัว

เพิ่ม 2 3

# พิมพ์มูลค่า $? ด้วยเสียงสะท้อนที่ประเมินค่าที่แท้จริงของตัวแปรในเครื่องหมายคำพูด
echo -e "ผลลัพธ์ = $?";

<< ไปที่ส่วนก่อนหน้า

ขอบคุณ Juan Carlos Ortiz!


แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. ผู้รับผิดชอบข้อมูล: Miguel ÁngelGatón
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา

  1.   ไม่มีตัวชี้ dijo

    ฉันไม่แน่ใจ แต่คำสั่งส่งกลับของฟังก์ชันทำหน้าที่ส่งคืนจำนวนเต็มระหว่าง 0 ถึง 255 เท่านั้นเช่นรหัสข้อผิดพลาดของ "exit" โดยทั่วไปจะเป็น 0 หากทุกอย่างเรียบร้อยดีและเป็นตัวเลขอื่นสำหรับกรณีอื่น ๆ แม้ว่าในตัวอย่างนี้จะได้ผล แต่ฉันไม่คิดว่ามันเป็นแนวทางปฏิบัติที่ดีที่จะให้ผลลัพธ์กลับมาพร้อมกับผลตอบแทน
    นั่นฉันกำลังพูดเรื่องไร้สาระหึ! ตา! ฮ่า!

  2.   จวนค dijo

    ความจริงทิ้งฉันไว้กับความสงสัย ไม่ว่าในกรณีใดเพื่อหลีกเลี่ยงปัญหาเกี่ยวกับฟังก์ชันเราสามารถแทนที่ผลตอบแทนด้วยเสียงสะท้อนในกรณีที่ฟังก์ชันพยายามส่งคืนหรือพิมพ์ค่าหรือสตริง

  3.   อาเบลเอส. เมาท์บิ๊ก dijo

    มันเป็นความจริงในการแก้ปัญหานี้คุณสามารถใช้คำสั่ง bc ในฟังก์ชัน sum ที่คุณสามารถใช้: result = `echo $ 1 + $ 2 | bc -ql`

  4.   หลุยส์มิเกล dijo

    ดี

    ฉันต้องการทราบว่าฉันสามารถบันทึกไฟล์ bash เพื่อเรียกใช้ทั้งระบบได้ที่ไหนและนั่นไม่ใช่ไดเร็กทอรี bin แต่สามารถสำรองข้อมูลได้

    ขอบคุณและขอแสดงความนับถือ.

  5.   Joaquin dijo

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

    1.    มาใช้ linux กันเถอะ dijo

      ขอขอบคุณ! กอด!
      พอล

  6.   Cristhian dijo

    ข้อผิดพลาดทางไวยากรณ์: "(" ไม่คาดคิด
    ฉันได้รับข้อผิดพลาดเมื่อพยายามเรียกใช้ตัวอย่างฉันคัดลอกมาเหมือนกันทุกประการ

    อะไรได้บ้าง? ฉันใช้ Ubuntu 14.10