Bash讀取檔案


在Bash Shell指令碼中,可以使用多種方法來讀取檔案。下面給出了一些重要的方法(假設讀取的檔案名為:read_file.txt)。

假設檔案:read_file.txt的內容如下:

Welcome
Visit
Our
Site
-
Tw511.com

方法1. 使用 cat fileName 讀取檔案

可以使用以下語法將檔案內容列印到終端。語法:

value=`cat file_name`

範例程式碼:

#!/bin/bash  

value=`cat read_file.txt`  
echo "$value"

執行上面範例程式碼,得到以下結果:

方法2. 使用 $(fileName) 讀取檔案

以下是使用$讀取檔案內容的語法:

value=$(file_name)

範例程式碼:

#!/bin/bash  

value=$(<read_file.txt)  
echo "$value"

執行上面範例程式碼,得到以下結果:

maxsu@yiibai:~/bashcode$ cat /dev/null > readfile.sh 
maxsu@yiibai:~/bashcode$ vi readfile.sh 
maxsu@yiibai:~/bashcode$ ./readfile.sh 
Welcome
Visist
Our
Site
-
Tw511.com

方法3. 從命令列讀取檔案內容

如果想從命令列逐行讀取檔案而不使用cat命令,則可以執行以下命令來執行任務:

命令

while read line; do Command; done < input.file

範例程式碼:

while read line; do echo $line; done < read_file.txt

執行上面範例程式碼,得到以下結果:

在這裡,while迴圈將到達檔案的每一行,並將該行的內容儲存在$line變數中,變數將在以後列印。

方法4. 使用指令碼讀取檔案內容

要使用指令碼讀取檔案內容,需要建立一個bash檔案並新增以下程式碼:

Bash指令碼

#!/bin/bash  

file='read_file.txt'  

i=1  
while read line; do  

#Reading each line  
echo "Line No. $i : $line"  
i=$((i+1))  
done < $file

在這裡,檔案名儲存在$file變數中,而$i變數用於保留行號的值。

執行上面範例程式碼,得到以下結果:
使用腳本讀取文件內容

方法5. 從命令列傳遞檔案名並讀取檔案

建立一個bash並新增以下指令碼,該指令碼將從命令列傳遞檔案名並逐行讀取檔案。第一個引數值由變數$1讀取,該變數將包含要讀取的檔案名。如果檔案在指定位置可用,則while迴圈將逐行讀取檔案並列印檔案內容。

Bash指令碼

#!/bin/bash  

file=$1  
while read line; do  

#Readind each line in sequence  
echo $line  
done <read_file.txt

執行上面範例程式碼,得到以下結果:

maxsu@yiibai:~/bashcode$ cat /dev/null > readfile.sh
maxsu@yiibai:~/bashcode$ vi readfile.sh 
maxsu@yiibai:~/bashcode$ ./readfile.sh 
Welcome
Visit
Our
Site
-
Tw511.com

在此,檔案名用作引數值。輸出是檔案:read_file.txt中的內容,單詞之間沒有多餘的空格。

方法6. 通過省略反斜槓跳脫來讀取檔案

如果想通過省略反斜槓跳脫來逐行讀取檔案的每一行,那麼需要在while迴圈中使用-r選項和read命令,參考以下程式碼:

#!/bin/bash  

while read -r line; do  

#Reading each line by omitting backslash escape  
echo $line  
done < read_file.txt

執行上面範例程式碼,得到以下結果:

maxsu@yiibai:~/bashcode$ cat /dev/null > readfile.sh
maxsu@yiibai:~/bashcode$ vi readfile.sh 
maxsu@yiibai:~/bashcode$ ./readfile.sh 
Welcome
Visit
Our
Site
-
Tw511.com

可能出於多種程式設計目的需要讀取檔案。例如,逐行搜尋匹配檔案中的任何特定內容。因此,對於任何程式設計語言而言,這都是一項非常常見而又十分有用的任務。