我想累积一个文件夹中包含的多个文件的行大小。我编写了以下脚本:
let a=0
let num=0
for i in folder/*
do
num=`cat $i | wc -l`
a=$a+$num
done
echo $a
我在脚本末尾得到的是 123+234+432+... 而不是加法算术运算的结果。
答案1
您的算术评估语法是错误的。使用以下任意一种(第一个非常可移植,但速度很慢,第二个是 POSIX,可移植,除了 Bourne shell 和早期版本的 Almquist shell,最后三个需要ksh
,bash
或zsh
):
a=`expr "$a" + "$num"`
a=$(($a+$num))
((a=a+num))
let a=a+num
((a+=num))
或者你可以跳过整个for
循环并执行以下操作:
wc -l folder/*
或者,如果您只想要总数:
cat folder/* | wc -l
或者使用 zsh 及其mult_ios
选项:
wc -l < folder/*
答案2
你也可以使用这个代码
a=`expr $a + $num`
echo $a
和确保“$a + $num”中的 + 两侧都有空格
答案3
答案需要指定哪个壳该代码有效。例如,在 bourne Shell ( sh
) 中,只有以下指令有效:
a=$((a+num))
a=$(($a+$num))
而@manatwork列出的其他可能性可能在伯恩有效再次壳 (bash
)
答案4
抱歉,之前的编辑是针对不同的帖子的。这里,只是对原始脚本进行了一个小修改:
设a=0 让数字=0 对于文件夹中的 i/* 做 num=`猫 $i |厕所-l` a=$(回显$a+$num|bc) 完毕 回显$a