如何在脚本中添加算术变量

如何在脚本中添加算术变量

我想累积一个文件夹中包含的多个文件的行大小。我编写了以下脚本:

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,bashzsh):

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

相关内容