瞭解如何用 Bash 讀寫檔案

大雄45發表於2021-04-22
導讀 當你使用 Bash 編寫 時,有時你需要從一個檔案中讀取資料或向一個檔案寫入資料。有時檔案可能包含配置選項,而另一些時候這個檔案是你的使用者用你的應用建立的資料。每種語言處理這個任務的方式都有些不同,本文將演示如何使用 Bash 和其他 POSIX   處理資料檔案。

瞭解如何用 Bash 讀寫檔案瞭解如何用 Bash 讀寫檔案

學習 Bash 讀取和寫入資料的不同方式,以及何時使用每種方法。
當你使用 Bash 編寫 時,有時你需要從一個檔案中讀取資料或向一個檔案寫入資料。有時檔案可能包含配置選項,而另一些時候這個檔案是你的使用者用你的應用建立的資料。每種語言處理這個任務的方式都有些不同,本文將演示如何使用 Bash 和其他 POSIX shell 處理資料檔案。

安裝 Bash

如果你在使用  ,你可能已經有了 Bash。如果沒有,你可以在你的軟體倉庫裡找到它。
在 macOS 上,你可以使用預設終端,Bash 或 Zsh,這取決於你執行的 macOS 版本。
在 Windows 上,有幾種方法可以體驗 Bash,包括微軟官方支援的 Windows Subsystem for Linux(WSL)。
安裝 Bash 後,開啟你最喜歡的文字編輯器並準備開始。

使用 Bash 讀取檔案

除了是 shell 之外,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命令被帶入你的 shell 環境,因為它被定義在include.sh 檔案中,它甚至可以識別引數(本例中的opensource.com)。變數var也被設定和匯入。

在 Bash 中解析檔案

另一種讓資料“進入” Bash 的方法是將其解析為資料流。有很多方法可以做到這一點.你可以使用grep或cat或任何可以獲取資料並管道輸出到標準輸出的命令。另外,你可以使用 Bash 內建的東西:重定向。重定向本身並不是很有用,所以在這個例子中,我也使用內建的echo命令來列印重定向的結果:

#!/bin/sh
echo $( < include.sh )

將其儲存為stream.sh並執行它來檢視結果:

$ bash ./stream.sh
greet() { echo "Hello ${1}" } var=42
$

對於include.sh 檔案中的每一行,Bash 都會將該行列印(或echo)到你的終端。先用管道把它傳送到一個合適的解析器是用 Bash 讀取資料的常用方法。例如, 假設include.sh是一個配置檔案, 它的鍵和值對用一個等號(=)分開. 你可以用awk甚至cut來獲取值:

#!/bin/sh
myVar=`grep var include.sh | cut -d'=' -f2`
echo $myVar

試著執行這個指令碼:

$ bash ./stream.sh
42

用 Bash 將資料寫入檔案

無論你是要儲存使用者用你的應用建立的資料,還是僅僅是關於使用者在應用中做了什麼的後設資料(例如,遊戲儲存或最近播放的歌曲),都有很多很好的理由來儲存資料供以後使用。在 Bash 中,你可以使用常見的 shell 重定向將資料儲存到檔案中。

例如, 要建立一個包含輸出的新檔案, 使用一個重定向符號:

#!/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 的優勢在於簡單易學,因為只需要一些基本的概念,你就可以構建複雜的程式。完整的文件請參考GNU.org上的優秀的 Bash 文件。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2769207/,如需轉載,請註明出處,否則將追究法律責任。

相關文章