可以用 for 和 while 实现一次读取一行,但是有点区别。
供测试文本内容如下:groad
linux abcdef
shell
beyes kkkwedia
使用下面的脚本一次读取一行(for 读取):
[Bash shell] 纯文本查看 复制代码 #!/bin/sh
for line in `cat user.txt`
do
echo $line
done
运行输出:sh readfile_for.sh
groad
linux
abcdef
shell
beyes
kkkwedia 由输出可以看到,测试文本中的第 2 行(linux abcdef)和第 4 行(beyes kkkwedia)原本是希望能够整行输出的,但是这里却被拆分成两行了。其原因是,for 在遇到行中的空格时,将按照空格来拆分。因此,如果文本中的每一行是没有空格相隔的,那么用 for 不会有问题。而对于有空格的情况,应该使用 while 来读取,下面是两种写法:
while 写法1:
[Bash shell] 纯文本查看 复制代码 #!/bin/sh
cat user.txt | while read line
do
echo $line
done
while 写法2:
[Bash shell] 纯文本查看 复制代码 #!/bin/sh
while read line
do
echo $line
done < user.txt
两种写法都有一样的输出:groad
linux abcdef
shell
beyes kkkwedia
用 while 的好处时,我们可以进一步的用 awk 来单独取出每行中的 1 列,比如修改上面的代码为:
[Bash shell] 纯文本查看 复制代码 #!/bin/sh
while read line
do
username=`echo $line | awk '{print $1}'`
password=`echo $line | awk '{print $2}'`
echo "--------------------"
echo $username "++++++++" $password
done < user.txt
运行输出:--------------------
groad ++++++++
--------------------
linux ++++++++ abcdef
--------------------
shell ++++++++
--------------------
beyes ++++++++ kkkwedia |