Linux shell 读取一行
方法一
通过指定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="
"
设置为换行符即可。
DEMO2
$cat t1.txt
a b
c d
不设置IFS
$ cat test_IFS.sh
#! /bin/sh
#IFS="
"
for LINE in `cat t1.txt`
do
echo $LINE
done
$sh test_IFS.sh
a
b
c
d
设置IFS="
"
$ cat test_IFS.sh
#! /bin/sh
IFS="
"
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
rank=%s
serial 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