瞭解如何用 Bash 讀寫檔案
導讀 | 當你使用 Bash 編寫 時,有時你需要從一個檔案中讀取資料或向一個檔案寫入資料。有時檔案可能包含配置選項,而另一些時候這個檔案是你的使用者用你的應用建立的資料。每種語言處理這個任務的方式都有些不同,本文將演示如何使用 Bash 和其他 POSIX 處理資料檔案。 |
學習 Bash 讀取和寫入資料的不同方式,以及何時使用每種方法。
當你使用 Bash 編寫
時,有時你需要從一個檔案中讀取資料或向一個檔案寫入資料。有時檔案可能包含配置選項,而另一些時候這個檔案是你的使用者用你的應用建立的資料。每種語言處理這個任務的方式都有些不同,本文將演示如何使用 Bash 和其他 POSIX shell 處理資料檔案。
如果你在使用
,你可能已經有了 Bash。如果沒有,你可以在你的軟體倉庫裡找到它。
在 macOS 上,你可以使用預設終端,Bash 或 Zsh,這取決於你執行的 macOS 版本。
在 Windows 上,有幾種方法可以體驗 Bash,包括微軟官方支援的 Windows Subsystem for Linux(WSL)。
安裝 Bash 後,開啟你最喜歡的文字編輯器並準備開始。
除了是 shell 之外,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 的方法是將其解析為資料流。有很多方法可以做到這一點.你可以使用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 的優勢在於簡單易學,因為只需要一些基本的概念,你就可以構建複雜的程式。完整的文件請參考GNU.org上的優秀的 Bash 文件。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2769207/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python讀寫檔案你真的瞭解嗎?Python
- 檔案排版(文字檔案讀寫)
- Golang 讀、寫檔案Golang
- Python 讀寫檔案Python
- Python——檔案讀寫Python
- keras讀寫檔案Keras
- 「Python」:檔案讀寫Python
- 檔案的讀寫
- 全方位解讀DLL檔案—編寫DLL
- Flutter 檔案讀寫---path_provider詳解FlutterIDE
- bash切割檔案
- python讀寫excel檔案PythonExcel
- C++讀寫檔案C++
- 普通檔案的讀寫
- python檔案讀寫操作Python
- C++檔案讀寫C++
- VBA建立文字檔案、讀寫文字檔案
- 讀取檔案流並寫入檔案流
- Python:讀寫檔案(I/O) | 組織檔案Python
- Bash 單命令列解釋(1)--檔案操作命令列
- nodejs xmlreader 讀寫xml檔案NodeJSXML
- Python中的檔案讀寫Python
- C++檔案讀寫操作C++
- Golang對檔案讀寫操作Golang
- Java 字元流檔案讀寫Java字元
- C語言-檔案讀寫C語言
- Perl讀寫檔案&字串操作字串
- Python 檔案讀寫(Python IO)Python
- c風格讀寫檔案
- java 讀寫 ini 配置檔案Java
- C/C++ 檔案讀寫C++
- C++讀寫檔案操作C++
- 基於 java 註解的 csv 檔案讀寫框架Java框架
- C#讀取文字檔案和寫文字檔案C#
- Python檔案讀寫、StringIO和BytesIOPython
- Perl IO:隨機讀寫檔案隨機
- 使用POI讀寫word docx檔案
- 使用C#讀寫ini檔案C#