Shell編程-檔案讀取方法集錦

來源:互聯網
上載者:User

 

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

a),#使用read命令讀取一行資料while read mylinedo    echo "LINE:"$mylinedone < datafile.txtb),#使用read命令讀取一行資料cat datafile.txt | while read mylinedo     echo "LINE:"$mylineDonec),#讀取一行資料cat datafile.txt | while myline=$(line)do     echo "LINE:"$mylineDoned),#讀取一行資料while myline=$(line)do     echo "LINE:"$mylinedone < datafile.txte),#使用read命令讀取變數資料cat datafile.txt | while read paraa parab paracdo    echo "PARAA:"$paraa    echo "PARAB:"$parab    echo "PARAC:"$paracDonef),#使用read命令讀取變數資料while read paraa parab paracdo    echo "PARAA:"$paraa    echo "PARAB:"$parab    echo "PARAC:"$paracdone < datafile.txt

 

G),

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

#!/bin/sh ip=192.168.253.111while read line <&3 ; do        echo "  attempt with ($line)"        # Try to connect and exit when done if it worked.        $line && exit 0done 3<<EOF/usr/bin/rlogin -l snap-admin $ip/usr/bin/ssh dev@$ip/usr/bin/ssh snap-admin@$ip/usr/bin/ssh root@$ipEOF

 

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

<<EOF

(內容)

EOF

    把EOF替換成其他東西

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

在這個例子中這麼寫 3<<EOF 應該是把它重新導向到一個檔案描述符中,大家都知道檔案描述符都是一個整形,這裡的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 <&-   關閉標準輸入

 

2 ,就read命令的使用方法整理如下:

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

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

 

參數解析: 

-e

 

-r

指定讀取命令把“\”(反斜線)做為輸入行的一個一般字元,而非控制字元。

-s

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

-u <fd>

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

-t <timeout>

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

-p <prompt>

列印提示符,等待輸入,並將輸入賦值給REPLY變數或者指定的變數。

-a <array>

讀入一組詞,依次賦值給數組array。

-n <nchars>

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

-d <delim>

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

name ...

指定read變數。read讀取一行資料後,分隔行資料為各個欄位,然後將欄位依次賦給指定的變數。如果分隔後的欄位數目比指定的變數多,那麼將把剩餘的全部欄位值都賦給最後的那個變數;反之,剩餘的變數被賦值為空白字串。如果read沒有指定變數,系統使用預設的REPLY作為預設變數名。 

使用重新導向讀取資料 

exec 6< datafile.txtwhile read -u 6 mylinedo    echo "LINE:"$mylinedone

 

變數分隔字元 
read命令預設的分隔字元是空格,多個空格被當做一個空格處理。我們也可以使用IFS(內部欄位分隔符號)指定的的字元作為分隔字元。假如有如下內容的一個檔案,它以“$”來分隔變數,希望把每個變數區別開來,可以使用如下指令碼: 

baidu$google$tencnt$sina

123456789

#使用read命令讀取變數資料while read paraa parab parac paraddo    echo "PARAA:"$paraa    echo "PARAB:"$parab    echo "PARAC:"$parac    echo "PARAD:"$paraddone < datafile.txt執行指令碼的輸出如下: PARAA:baiduPARAB:googlePARAC:tencentPARAD:sinaPARAA:123456789PARAB:PARAC:

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.