เมื่อคุณเขียนสคริปต์ด้วย Bash บางครั้งคุณจำเป็นต้องอ่านข้อมูลจากหรือเขียนข้อมูลลงในไฟล์ บางครั้งไฟล์อาจมีตัวเลือกการกำหนดค่า และบางครั้งไฟล์ก็เป็นข้อมูลที่ผู้ใช้ของคุณสร้างด้วยแอปพลิเคชันของคุณ ทุกภาษาจัดการกับงานนี้แตกต่างกันเล็กน้อย และบทความนี้จะสาธิตวิธีจัดการไฟล์ข้อมูลด้วย Bash และ POSIX เชลล์อื่นๆ
ติดตั้ง Bash
หากคุณใช้ Linux คุณอาจมี Bash อยู่แล้ว หากไม่มี คุณสามารถค้นหาได้ในที่เก็บซอฟต์แวร์ของคุณ
ใน macOS คุณจะใช้เทอร์มินัลเริ่มต้นได้ทั้ง Bash หรือ Zsh ทั้งนี้ขึ้นอยู่กับเวอร์ชัน macOS ที่คุณใช้อยู่
ใน Windows คุณสามารถสัมผัสประสบการณ์ Bash ได้หลายวิธี ซึ่งรวมถึง Windows Subsystem for Linux (WSL) ที่ได้รับการสนับสนุนอย่างเป็นทางการของ Microsoft
เมื่อคุณติดตั้ง Bash แล้ว ให้เปิดโปรแกรมแก้ไขข้อความที่คุณชื่นชอบและเตรียมพร้อมสำหรับโค้ด
การอ่านไฟล์ด้วย Bash
นอกเหนือจากการเป็นเชลล์แล้ว Bash ยังเป็นภาษาสคริปต์ มีหลายวิธีในการอ่านข้อมูลจาก Bash:คุณสามารถสร้างสตรีมข้อมูลและแยกวิเคราะห์เอาต์พุต หรือคุณสามารถโหลดข้อมูลลงในหน่วยความจำได้ ทั้งสองวิธีเป็นวิธีการนำเข้าข้อมูลที่ถูกต้อง แต่แต่ละวิธีก็มีกรณีการใช้งานที่ค่อนข้างเฉพาะเจาะจง
จัดหาไฟล์ใน Bash
เมื่อคุณ "ซอร์ส" ไฟล์ใน Bash คุณทำให้ Bash อ่านเนื้อหาของไฟล์โดยคาดหวังว่าจะมีข้อมูลที่ถูกต้องซึ่ง Bash สามารถใส่ลงในโมเดลข้อมูลที่สร้างขึ้นได้ คุณจะไม่ดึงข้อมูลจากไฟล์เก่าใดๆ แต่คุณสามารถใช้วิธีนี้เพื่ออ่านไฟล์การกำหนดค่าและฟังก์ชันได้
ตัวอย่างเช่น สร้างไฟล์ชื่อ example.sh
และป้อนสิ่งนี้ลงไป:
#!/bin/sh
greet opensource.com
echo "The meaning of life is $var"
เรียกใช้รหัสเพื่อดูว่าล้มเหลว:
$ bash ./example.sh
./example.sh: line 3: greet: command not found
The meaning of life is
Bash ไม่มีคำสั่งชื่อ greet
ดังนั้นจึงไม่สามารถรันบรรทัดนั้นได้ และไม่มีบันทึกของตัวแปรชื่อ var
ดังนั้นจึงไม่มีความหมายของชีวิต ในการแก้ไขปัญหานี้ ให้สร้างไฟล์ชื่อ include.sh
:
greet() {
echo "Hello ${1}"
}
var=42
แก้ไข example.sh
. ของคุณ สคริปต์เพื่อรวม source
คำสั่ง:
#!/bin/sh
source include.sh
greet opensource.com
echo "The meaning of life is $var"
เรียกใช้สคริปต์เพื่อดูการทำงาน:
$ bash ./example.sh
Hello opensource.com
The meaning of life is 42
greet
คำสั่งถูกนำเข้าสู่สภาวะแวดล้อมเชลล์ของคุณเนื่องจากมีการกำหนดไว้ใน include.sh
ไฟล์ และยังรับรู้อาร์กิวเมนต์ (opensource.com
ในตัวอย่างนี้) ตัวแปร var
ถูกตั้งค่าและนำเข้าด้วย
แยกวิเคราะห์ไฟล์ใน Bash
อีกวิธีหนึ่งในการรับข้อมูล "เข้า" Bash คือการแยกวิเคราะห์เป็นสตรีมข้อมูล มีหลายวิธีในการทำเช่นนี้ คุณสามารถใช้ grep
หรือ cat
หรือคำสั่งใดๆ ที่นำข้อมูลและไพพ์ไปยัง stdout อีกทางหนึ่ง คุณสามารถใช้สิ่งที่สร้างไว้ใน Bash:การเปลี่ยนเส้นทาง การเปลี่ยนเส้นทางด้วยตัวเองไม่มีประโยชน์มากนัก ดังนั้นในตัวอย่างนี้ ฉันยังใช้ echo
ในตัว คำสั่งพิมพ์ผลลัพธ์ของการเปลี่ยนเส้นทาง:
#!/bin/sh
echo $( < include.sh )
บันทึกเป็น stream.sh
และเรียกใช้เพื่อดูผลลัพธ์:
$ bash ./stream.sh
greet() { echo "Hello ${1}" } var=42
$
สำหรับแต่ละบรรทัดใน include.sh
ไฟล์ Bash พิมพ์ (หรือสะท้อน) บรรทัดไปยังเทอร์มินัลของคุณ การวางไพพ์กับ parser ที่เหมาะสมก่อนเป็นวิธีทั่วไปในการอ่านข้อมูลด้วย Bash ตัวอย่างเช่น สมมติสักครู่ว่า include.sh
เป็นไฟล์การกำหนดค่าที่มีคู่คีย์และค่าคั่นด้วยค่าที่เท่ากัน (=
) เข้าสู่ระบบ. คุณสามารถรับค่าด้วย awk
หรือแม้กระทั่ง cut
:
#!/bin/sh
myVar=`grep var include.sh | cut -d'=' -f2`
echo $myVar
ลองเรียกใช้สคริปต์:
$ bash ./stream.sh
42
การเขียนข้อมูลลงในไฟล์ด้วย Bash
ไม่ว่าคุณจะจัดเก็บข้อมูลที่ผู้ใช้ของคุณสร้างด้วยแอปพลิเคชันของคุณหรือเพียงแค่ข้อมูลเมตาเกี่ยวกับสิ่งที่ผู้ใช้ทำในแอปพลิเคชัน (เช่น การบันทึกเกมหรือเพลงที่เล่นล่าสุด) มีเหตุผลดีๆ มากมายในการจัดเก็บข้อมูลเพื่อใช้ในภายหลัง ใน Bash คุณสามารถบันทึกข้อมูลลงในไฟล์ได้โดยใช้การเปลี่ยนเส้นทางเชลล์ทั่วไป
ตัวอย่างเช่น หากต้องการสร้างไฟล์ใหม่ที่มีเอาต์พุต ให้ใช้โทเค็นการเปลี่ยนเส้นทางเดียว:
#!/bin/sh
TZ=UTC
date > date.txt
เรียกใช้สคริปต์สองสามครั้ง:
$ bash ./date.sh
$ cat date.txt
Tue Feb 23 22:25:06 UTC 2021
$ bash ./date.sh
$ cat date.txt
Tue Feb 23 22:25:12 UTC 2021
หากต้องการผนวกข้อมูล ให้ใช้โทเค็นการเปลี่ยนเส้นทางสองครั้ง:
#!/bin/sh
TZ=UTC
date >> date.txt
เรียกใช้สคริปต์สองสามครั้ง:
$ bash ./date.sh
$ bash ./date.sh
$ bash ./date.sh
$ cat date.txt
Tue Feb 23 22:25:12 UTC 2021
Tue Feb 23 22:25:17 UTC 2021
Tue Feb 23 22:25:19 UTC 2021
Tue Feb 23 22:25:22 UTC 2021
Bash สำหรับการตั้งโปรแกรมอย่างง่าย
Bash เชี่ยวชาญในการเรียนรู้ได้ง่าย เพราะคุณสามารถสร้างโปรแกรมที่ซับซ้อนได้ด้วยแนวคิดพื้นฐานเพียงไม่กี่ข้อ สำหรับเอกสารฉบับเต็ม โปรดดูเอกสาร Bash ที่ยอดเยี่ยมบน GNU.org