我們通過(guò)一些實(shí)例,來(lái)進(jìn)一步了解使用輸入重定向從文件讀取內(nèi)容的一些方法。
在 Shell 腳本中我們針對(duì)某一個(gè)代碼塊使用輸入重定向,請(qǐng)看下面的實(shí)例,我們?cè)谀_本中的一個(gè)代碼塊使用重定向讀取文件的內(nèi)容。
#! /bin/bash
if [ $# -ne 1 ]; then
echo "Usage: $0 FILEPATH"
exit
fi
file=$1
{
read line1
read line2
} < $file
echo "First line in $file is:"
echo "$line1"
echo "Second line in $file is:"
echo "$line2"
exit 0
上述腳本的運(yùn)行結(jié)果:

運(yùn)行結(jié)果
有時(shí)我們可能需要逐行地讀取一個(gè)文件中的內(nèi)容,并對(duì)每一行進(jìn)行特定的處理,這時(shí)該如何操作?下面的示例,將使用 while 循環(huán)與重定向結(jié)合使用來(lái)逐行地讀取文件的內(nèi)容。
#! /bin/bash
if [ $# -ne 1 ]; then
echo "Usage: $0 FILEPATH"
exit
fi
filename=$1
count=0
while read LINE
do
let count++
echo "$count $LINE"
done < $filename
echo -e "\nTotal $count lines read."
exit 0
上述實(shí)例的運(yùn)行結(jié)果將類(lèi)似如下所示:

運(yùn)行結(jié)果
當(dāng)然我們也可以使用 until 循環(huán)來(lái)實(shí)現(xiàn)與上述實(shí)例同樣的功能:
#! /bin/bash
if [ $# -ne 1 ]; then
echo "Usage: $0 FILEPATH"
exit
fi
filename=$1
count=0
until ! read LINE
do
let count++
echo "$count $LINE"
done < $filename
echo -e "\nTotal $count lines read."
exit 0
上述實(shí)例的運(yùn)行結(jié)果將類(lèi)似如下所示:

運(yùn)行結(jié)果
上述實(shí)例與前一個(gè)實(shí)例的唯一區(qū)別就是語(yǔ)句 “until ! read LINE”。
我們?cè)倏匆幌率褂?if 語(yǔ)句結(jié)合重定向讀取文件的內(nèi)容:
#! /bin/bash
if [ $# -ne 1 ]; then
echo "Usage: $0 FILEPATH"
exit
fi
filename=$1
count=0
if true; then
read LINE
let count++
echo "$count $LINE"
fi < $filename
echo -e "\nTotal $count lines read."
exit 0
上述實(shí)例的運(yùn)行結(jié)果將類(lèi)似如下所示:

運(yùn)行結(jié)果
本文參考自 《Linux Shell命令行及腳本編程實(shí)例詳解 》