Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม BASH

แยกไฟล์กำหนดค่าด้วย Bash

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

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

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

ทางปกติ

เช่นเดียวกับภาษาอื่นๆ คุณสามารถเขียนโค้ดสำหรับโปรแกรม Bash ที่อ่านและแยกวิเคราะห์ไฟล์การกำหนดค่าข้อความ ASCII อ่านชื่อตัวแปร และตั้งค่าเมื่อโค้ดโปรแกรมทำงาน ตัวอย่างเช่น ไฟล์การกำหนดค่าอาจมีลักษณะดังนี้:

var1=LinuxGeek46
var2=Opensource.com

โปรแกรมจะอ่านไฟล์นั้น แยกวิเคราะห์แต่ละบรรทัด และตั้งค่าเป็นตัวแปรแต่ละตัว

การจัดหา

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

ตามปกติแล้ว สาธิตง่ายกว่าอธิบาย

ขั้นแรก สร้าง ~/bin ไดเร็กทอรี (หากยังไม่มีอยู่) และทำให้เป็นไดเร็กทอรีการทำงานปัจจุบัน (PWD) Linux Filesystem Hierarchical Standard กำหนด ~/bin เป็นที่ที่เหมาะสมสำหรับผู้ใช้ในการจัดเก็บไฟล์ปฏิบัติการ

สร้างไฟล์ใหม่ในไดเร็กทอรีนี้ ตั้งชื่อมันว่า main และทำให้สามารถเรียกใช้งานได้:

[dboth@david bin]$ touch main
[dboth@david bin]$ chmod +x main
[dboth@david bin]$

เพิ่มเนื้อหาต่อไปนี้ในไฟล์ปฏิบัติการนี้:

#!/bin/bash
Name="LinuxGeek"
echo $Name

และรันโปรแกรม Bash นี้:

[dboth@david bin]$ ./main
LinuxGeek
[dboth@david bin]$

สร้างไฟล์ใหม่และเรียกมันว่า ~/bin/data . ไฟล์นี้ไม่จำเป็นต้องสามารถเรียกใช้งานได้ เพิ่มข้อมูลต่อไปนี้ลงไป:

# Sourced code and variables
echo "This is the sourced code from the data file."
FirstName="David"
LastName="Both"

เพิ่มสามบรรทัดใน main โปรแกรมให้มีลักษณะดังนี้:

#!/bin/bash
Name="LinuxGeek"
echo $Name
source ~/bin/data
echo "First name: $FirstName"
echo "LastName: $LastName"

เรียกใช้โปรแกรมอีกครั้ง:

[dboth@david bin]$ ./main
LinuxGeek
This is the sourced code from the data file.
First name: David
LastName: Both
[dboth@david bin]$

มีอีกสิ่งหนึ่งที่น่าสนใจมากที่ควรรู้เกี่ยวกับการจัดหา คุณสามารถใช้จุดเดียว (. ) เป็นทางลัดสำหรับ source สั่งการ. เปลี่ยน main ไฟล์เพื่อแทนที่ . แทนที่ source :

#!/bin/bash
Name="LinuxGeek"
echo $Name
. ~/bin/data
echo "First name: $FirstName"
echo "LastName: $LastName"

และรันโปรแกรมอีกครั้ง ผลลัพธ์ควรเหมือนกับการรันครั้งก่อนทุกประการ

การเริ่มต้นทุบตี

โฮสต์ Linux ทุกเครื่องที่ใช้ Bash ซึ่งเกือบจะทั้งหมดแล้ว เนื่องจาก Bash เป็นเชลล์เริ่มต้นสำหรับการแจกแจงทั้งหมด รวมถึงตัวอย่างการจัดหาในตัวที่ยอดเยี่ยมและในตัว

เมื่อใดก็ตามที่เชลล์ Bash เริ่มทำงาน ต้องกำหนดค่าสภาพแวดล้อมเพื่อให้สามารถใช้งานได้ มีไฟล์หลักห้าไฟล์และหนึ่งไดเร็กทอรีที่ใช้ในการกำหนดค่าสภาพแวดล้อม Bash สิ่งเหล่านี้แสดงอยู่ที่นี่พร้อมกับหน้าที่หลัก:

  • /etc/profile :สภาพแวดล้อมทั้งระบบและโปรแกรมเริ่มต้น
  • /etc/bashrc :ฟังก์ชันและนามแฝงทั้งระบบ
  • /etc/profile.d/ :ไดเร็กทอรีที่มีสคริปต์ทั้งระบบสำหรับกำหนดค่าเครื่องมือบรรทัดคำสั่งต่างๆ เช่น vim และ mc และสคริปต์การกำหนดค่าแบบกำหนดเองใดๆ ที่ผู้ดูแลระบบสร้างขึ้น
  • ~/.bash_profile :สภาพแวดล้อมเฉพาะผู้ใช้และโปรแกรมเริ่มต้น
  • ~/.bashrc :นามแฝงและฟังก์ชันเฉพาะผู้ใช้
  • ~/.bash_logout :คำสั่งเฉพาะผู้ใช้ที่จะดำเนินการเมื่อผู้ใช้ออกจากระบบ

พยายามติดตามลำดับการดำเนินการผ่านไฟล์เหล่านี้ และกำหนดลำดับที่จะใช้สำหรับการเริ่มต้น Bash ที่ไม่ใช่การเข้าสู่ระบบ เทียบกับการเริ่มต้น Bash ในการเข้าสู่ระบบ ฉันทำสิ่งนี้ในบทที่ 17 ของเล่ม 1 ในชุดฝึกอบรม Linux การใช้และดูแลระบบ Linux:Zero to sysadmin .

ฉันจะให้คำใบ้หนึ่งแก่คุณ ทุกอย่างเริ่มต้นด้วย ~/.bashrc สคริปต์

บทสรุป

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