发布网友 发布时间:2022-04-23 02:28
共5个回答
热心网友 时间:2023-08-19 10:13
首先,直接for i in *.c这样写不会出错吗,你可以在循环内打印下lines的值,就知道expr为什么会报错了。比如一个文件tmp.txt,内容有5行,使用命令wc -l tmp.txt,得到的结果是“5 tmp.txt”,这样的一个字符串与数字进行运算肯定不行。
sum=0
files=$(ls *.c)
for i in $files; do
lines=`cat $i | wc -l`
sum=`expr $sum + $lines`
done
echo $sum
热心网友 时间:2023-08-19 10:13
$lines没有初始化,也没有得到值,因为for循环就错了,应该写成如下。
sum=0
for i in `ls *.c`
do
lines=`wc -l $i`
sum=`expr $sum + $lines`
done
echo $sum
更简单的方法是: cat *.c | wc -l
热心网友 时间:2023-08-19 10:13
直接 wc -l *.C 就可以得到当前目录下以.C结尾的文件行数的总和了
但这样还会另外输出每个文件的行数,下面这个命令可以只得到行号
wc -l *.C | awk 'END{print $1}'
类似的例子
$ ls
a.txt .awk .awk
$ wc -l *.awk
58 .awk
43 .awk
101 total
$ wc -l *.awk | awk 'END{print $1}'
101
热心网友 时间:2023-08-19 10:14
lines=`wc -l $i`
的结果中有文件名
lines=`wc -l ${i}|awk '{print $1}'`
调试shell使用
sh -x fileName
热心网友 时间:2023-08-19 10:15
看看 lines 这个里面的东西是什么,我怀疑内容有问题。