ไปยัง ปลอดภัย ของเรา แนวคิด เราจะเรียนรู้ 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 "ผลลัพธ์ = $?";
ฉันไม่แน่ใจ แต่คำสั่งส่งกลับของฟังก์ชันทำหน้าที่ส่งคืนจำนวนเต็มระหว่าง 0 ถึง 255 เท่านั้นเช่นรหัสข้อผิดพลาดของ "exit" โดยทั่วไปจะเป็น 0 หากทุกอย่างเรียบร้อยดีและเป็นตัวเลขอื่นสำหรับกรณีอื่น ๆ แม้ว่าในตัวอย่างนี้จะได้ผล แต่ฉันไม่คิดว่ามันเป็นแนวทางปฏิบัติที่ดีที่จะให้ผลลัพธ์กลับมาพร้อมกับผลตอบแทน
นั่นฉันกำลังพูดเรื่องไร้สาระหึ! ตา! ฮ่า!
ความจริงทิ้งฉันไว้กับความสงสัย ไม่ว่าในกรณีใดเพื่อหลีกเลี่ยงปัญหาเกี่ยวกับฟังก์ชันเราสามารถแทนที่ผลตอบแทนด้วยเสียงสะท้อนในกรณีที่ฟังก์ชันพยายามส่งคืนหรือพิมพ์ค่าหรือสตริง
มันเป็นความจริงในการแก้ปัญหานี้คุณสามารถใช้คำสั่ง bc ในฟังก์ชัน sum ที่คุณสามารถใช้: result = `echo $ 1 + $ 2 | bc -ql`
ดี
ฉันต้องการทราบว่าฉันสามารถบันทึกไฟล์ bash เพื่อเรียกใช้ทั้งระบบได้ที่ไหนและนั่นไม่ใช่ไดเร็กทอรี bin แต่สามารถสำรองข้อมูลได้
ขอบคุณและขอแสดงความนับถือ.
ขอบคุณมากฉันกำลังเริ่มต้นด้วยสคริปต์และความจริงก็คือสิ่งนี้มีประโยชน์มากคุณใจดีมากที่แบ่งปันความรู้ของคุณ!
ความนับถือ
ขอขอบคุณ! กอด!
พอล
ข้อผิดพลาดทางไวยากรณ์: "(" ไม่คาดคิด
ฉันได้รับข้อผิดพลาดเมื่อพยายามเรียกใช้ตัวอย่างฉันคัดลอกมาเหมือนกันทุกประการ
อะไรได้บ้าง? ฉันใช้ Ubuntu 14.10