网上有很多 shell script 读文本文件的例子,但是都没有讲出故事的全部,只说了一半。举个例子,比如从一个 testfile 文件中读取如下格式的文本行:
$ vi readfile
#!/bin/sh
testfile=$1
while read -r line
do
echo $line
done $testfile
$ chmod +x readfile
$ ./readfile testfile
ls -a -l /bin | sort
ls -a -l /bin | sort | wc
ls -a -l | grep sh | wc
ls -a -l
ls -a -l | sort | wc
如果想要输出 testfile 文件原有的格式,把每行(作为整体)原封不动的打印出来怎么办?这时需要指定 IFS 变量,告诉 shell 以 "行" 为单位读取。
$ vi readfile
#!/bin/sh
IFS=""
testfile=$1
while read -r line
do
echo $line
done $testfile
$ ./readfile testfile
ls -a -l /bin | sort
ls -a -l /bin | sort | wc
ls -a -l | grep sh | wc
ls -a -l
ls -a -l | sort | wc
#!/bin/sh
testfile=$1
x=`wc -l $testfile |awk '{print $1}'`
i=1
while [ $i -le $x ]
do
echo "`head -$i $testfile | tail -1`"
i=`expr $i + 1`
done