方法一
通過指定IFS--Internal Field Separator,IFS默認情況下是<space><tab><newline>,可以在腳本中設定IFS值
DEMO 1
$cat t1.txt
abcfd
$cat test_IFS.sh
#! /bin/sh
IFS="c"
for LINE in `cat t1.txt`
do
echo $LINE
done
$sh test_IFS.sh
ab
fd
這里需要讀取一行只需將IFS="\n"設置為換行符即可。
DEMO2
$cat t1.txt
a b
c d
不設置IFS
$ cat test_IFS.sh
#! /bin/sh
#IFS="\n"
for LINE in `cat t1.txt`
do
echo $LINE
done
$sh test_IFS.sh
a
b
c
d
設置IFS="\n"
$ cat test_IFS.sh
#! /bin/sh
IFS="\n"
for LINE in `cat t1.txt`
do
echo $LINE
done
$sh test_IFS.sh
a b
c d
這樣就可以達到讀取一行的目的了
方法2
利用read命令,從標准輸入讀取一行,根據IFS進行切分並相應的變量賦值,這里為了我們故意將IFS設置為&,來進行演示
DEMO3
$cat test_read.sh
#! /bin/sh
IFS="&"
printf "Enter your name, rank, serial num:"
read name rank serno
printf "name=%s\nrank=%s\nserial num=%s" $name $rank $serno
$sh test_read.sh
Enter your name, rank, serial num:zk&1&123
name=zk
rank=1
serial num=123
所以我們知道read每次是讀一行,因此使用read命令就好了
DEMO4
$cat readline_1.sh
#! /bin/sh
cat t1.txt | while read LINE
do
echo $LINE
done
$sh readline_1.sh
a b
c d
這里是通過文件重定向給read處理
方法3
用read去讀取文件重定向
DEMO5
$cat readline_2.sh
#! /bin/sh
while read LINE
do
echo $LINE
done < t1.txt
$sh readline_2.sh
a b
c d
推薦使用方法3