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...