Shell程式設計 檔案讀取方法集錦

2021-06-01 09:19:32 字數 3698 閱讀 6004

1 ,在這裡總結一下shell讀取檔案的方法

a),

#使用read命令讀取一行資料

while read myline

do echo "line:"$myline

done < datafile.txt

b),#使用read命令讀取一行資料

cat datafile.txt | while read myline

do echo "line:"$myline

done

c),#讀取一行資料

cat datafile.txt | while myline=$(line)

do echo "line:"$myline

done

d),#讀取一行資料

while myline=$(line)

do echo "line:"$myline

done < datafile.txt

e),#使用read命令讀取變數資料

cat datafile.txt | while read paraa parab parac

do echo "paraa:"$paraa

echo "parab:"$parab

echo "parac:"$parac

done

f),#使用read命令讀取變數資料

while read paraa parab parac

do echo "paraa:"$paraa

echo "parab:"$parab

echo "parac:"$parac

done < datafile.txt

g),下面這個是在學習公司的**時碰到的,其實不能算是讀取檔案,應該算是從標準輸入讀取,**如下:

#!/bin/sh 

ip=192.168.253.111

while read line <&3 ; do

echo " attempt with ($line)"

# try to connect and exit when done if it worked.

$line && exit 0

done 3<

網上有解釋說下面這個格式:

<(內容)

eof把eof

替換成其他東西

意思是把內容當作標準輸入傳給程式

在這個例子中這麼寫 3《應該是把它重定向到乙個檔案描述符中,大家都知道檔案描述符都是乙個整形,這裡的

3就是作為乙個檔案描述符來用。

這裡再簡要回顧一下< <

的用法。當

s h e l l

看到< <

的時候,它就會知道下乙個詞是乙個分界符。在該分界符以後的內容都被當作輸入,直到

s h e l l

又看到該分界符

(位於單獨的一行

)。這個分界符可以是你所定義的任何字串。

下面是對常見的檔案描述符命令的整理:

command > filename 把標準輸出重定向到乙個新檔案中

command >> filename 把標準輸出重定向到乙個檔案中(追加)

command 1 > filename 把標準輸出重定向到乙個檔案中

command > filename 2 >&1 把標準輸出和標準錯誤一起重定向到乙個檔案中

command 2 >filename 把標準錯誤重定向到乙個檔案中

command 2 >> filename 把標準錯誤重定向到乙個檔案中(追加)

command >> filename 2 >&1 把標準輸出和標準錯誤一起重定向到乙個檔案中(追加)

command < filename > filename2 command命令以filename檔案作為標準輸入,

以filename2檔案作為標準輸出

command < filename command命令以filename檔案作為標準輸入

command << delimiter 從標準輸出中讀入,直至遇到delimiter分界符

command <&m 把檔案描述符m作為標準輸出

command >&m 把標準輸出重定向到檔案描述符m中

command <&- 關閉標準輸入

read命令從標準輸入讀取一行,並把輸入行的每個字段(以指定的分隔符分隔)的值賦給命令列上的變數。 

read [-ers] [-u fd] [-t timeout] [-p prompt] [-a array] [-n nchars] [-d delim] [name ...]

引數解析: 

-e-r

指定讀取命令把「\」

(反斜槓

)做為輸入行的乙個普通字元,而非控制字元。 -s

安靜模式。如果指定該引數且從終端讀入資料,那麼輸入的時候將不回顯在螢幕上。

-u 指定讀入資料的檔案描述符,不再使用預設的標準輸入。

-t 等待標準輸入的超時時間,單位為秒。如果在指定的時間內沒有輸入,即時返回。

-p 列印提示符,等待輸入,並將輸入賦值給reply

變數或者指定的變數。

-a 讀入一組詞,依次賦值給陣列array。

-n 讀取指定的字元數。如果已讀取n

個字元,馬上返回,下次從返回點繼續讀取;如果已到行結束,無論滿不滿足

n個字元都返回。

-d 指定行結束符,讀到該字元就當做一行的結束。

name ...

指定read

變數。read

讀取一行資料後,分隔行資料為各個字段,然後將字段依次賦給指定的變數。如果分隔後的字段數目比指定的變數多,那麼將把剩餘的全部字段值都賦給最後的那個變數;反之,剩餘的變數被賦值為空字串。如果

read

沒有指定變數,系統使用預設的

reply

作為預設變數名。 

使用重定向讀取資料 

exec 6< datafile.txt

while read -u 6 myline

do echo "line:"$myline

done

變數分隔符 

read命令預設的分隔符是空格,多個空格被當做乙個空格處理。我們也可以使用

ifs(內部字段分隔符)指定的的字元作為分隔符。假如有如下內容的乙個檔案,它以「$

」來分隔變數,希望把每個變數區別開來,可以使用如下指令碼: 

#使用read命令讀取變數資料

while read paraa parab parac parad

do echo "paraa:"$paraa

echo "parab:"$parab

echo "parac:"$parac

echo "parad:"$parad

done < datafile.txt

執行指令碼的輸出如下:

shell讀取檔案的方法

在linux中有很多方法逐行讀取乙個檔案的方法,其中最常用的就是下面的指令碼裡的方法,而且是效率最高,使用最多的方法。為了給大家乙個直觀的感受,我們將通過生成乙個大的檔案的方式來檢驗各種方法的執行效率。方法1 while迴圈中執行效率最高,最常用的方法。複製 如下 function while re...

shell 讀取配置檔案的方法

乙個bbs的問答。配置檔案config內容如下 id 123 ip 192.168.3.154 name test方法一,利用sed解析文字,提取配置資訊 id sed id d s urfile ip sed ip d s urfile name sed name d s urfile echo ...

Shell 程式設計知識點集錦

shell 指令碼是按行分隔每一條 shell 語句。如果每一條shell語句寫在單獨一行,此時可以加分號,也可以不加,沒有什麼區別。如果多條 shell 寫在同一行,那麼此時需一定要用分號將不用語句分隔開來。dev null 代表空裝置檔案,類似於 windows 的 站。代表重定向到 例如 ec...