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

cur*_*ous 35 shell shell-script arithmetic

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

let a=0
let num=0
for i in folder/*
do
        num=`cat $i | wc -l`
        a=$a+$num
done
echo $a
Run Code Online (Sandbox Code Playgroud)

我在脚本末尾得到的是 123+234+432+... 而不是加法运算的结果。

man*_*ork 69

您的算术评估语法错误。使用以下任何的(第一个是非常便携,但速度慢,二是POSIX和除了Bourne shell的便携和更早版本的Almquist外壳,最后三个要求kshbashzsh):

a=`expr "$a" + "$num"`

a=$(($a+$num))

((a=a+num))

let a=a+num

((a+=num))
Run Code Online (Sandbox Code Playgroud)

或者您可以跳过整个for循环并执行以下操作:

wc -l folder/*
Run Code Online (Sandbox Code Playgroud)

或者,如果您只想要总数:

cat folder/* | wc -l
Run Code Online (Sandbox Code Playgroud)

或者使用 zsh 及其mult_ios选项:

wc -l < folder/*
Run Code Online (Sandbox Code Playgroud)

  • 不需要`((...))`里面的`$`。`a=$((a+num))` 已经很好了。 (2认同)

use*_*213 7

您也可以使用此代码

    a=`expr $a + $num`
    echo $a
Run Code Online (Sandbox Code Playgroud)

确保在 "$a + $num" 的两边都有一个空格