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

อ่านและเขียนไฟล์ด้วย Bash

เมื่อคุณเขียนสคริปต์ด้วย 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