linux shell脚本问题

发布网友 发布时间: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 这个里面的东西是什么,我怀疑内容有问题。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com