我怎么能用bash做基础数学?

时间:2014-11-23 02:36:21

标签: linux bash shell

我做了一些我认为应该是一个名为bashispainful.sh的shell脚本:

代码:

#!/bin/bash
Var1= $((10*5))
Var2= $((10/5))
Var3= $((10-5))
Var4= $((10+5))
Var5= ($(Var4)*$(Var3))
echo $Var1
echo $Var2
echo $Var3
echo $Var4
echo $Var5

我想收到输出:

50
2
5
15
75

我目前的输出:

./Bashispainful.sh: line 2: 50: command not found
./Bashispainful.sh: line 3: 2: command not found
./Bashispainful.sh: line 4: 5: command not found
./Bashispainful.sh: line 5: 15: command not found
./Bashispainful.sh: line 6: syntax error near unexpected token `('
./Bashispainful.sh: line 6: `Var5= ($(Var4)*$(Var3))'

我的目标是获得任何关于能够在bash中完成基本数学的能力。我已经尝试了每个网站以及括号,美元符号和缺乏的各种组合,我可以想到,坦率地说,我感到困惑和绝望。如何在bash中执行简单的数学运算?

(请让这个易于理解 - 请假设我是非程序员和愚蠢的人)

4 个答案:

答案 0 :(得分:4)

Bash并不痛苦:

#!/bin/bash
Var1=$((10*5))
Var2=$((10/5))
Var3=$((10-5))
Var4=$((10+5))
Var5=$((Var4*Var3))
echo $Var1
echo $Var2
echo $Var3
echo $Var4
echo $Var5

输出结果为:

50
2
5
15
75

注释

考虑:

Var1= $((10*5))

在bash执行算术替换后,该命令如下所示:

Var1= 50

该命令说(a)暂时将Var1设置为空,(b)运行名为50的命令。由于没有名为50的命令,因此收到错误:

Bashispainful.sh: line 2: 50: command not found

解决方法是删除空格,以便将Var1分配给非空值:

Var1=$((10*5))

考虑:

Var5= ($(Var4)*$(Var3))

对于名称以Var5开头的命令,这会将(暂时设置为空。那是无效的。因此错误:

./Bashispainful.sh: line 6: syntax error near unexpected 

算术的正确bash语法是$((...))。因此,该行可以写成:

Var5=$(($Var4*$Var3))

但是,因为bash并不痛苦,所以它理解算术表达式中的字符串是shell变量。因此,美元符号是不必要的,以上可以简化为:

Var5=$((Var4*Var3))

或者,由于上面只是对变量进行赋值,因此可以进一步简化为:

((Var5=Var4*Var3))

请注意$((...))返回算术计算的值,但((...))不返回任何值。它设置了一个退出代码,使其对if语句中使用的测试很有用。

答案 1 :(得分:2)

删除$之前的空格,并从Var5声明中的行移动括号。

#!/bin/bash
Var1=$((10*5))
Var2=$((10/5))
Var3=$((10-5))
Var4=$((10+5))
Var5=$((Var4*Var3))
echo $Var1
echo $Var2
echo $Var3
echo $Var4
echo $Var5

带有声明的空格螺钉,你想要读取Var4和Var3中的值,所以你需要两个括号。

答案 2 :(得分:0)

检查bash命令" expr"

例如,如果您想要添加两个数字:     var = expr 2 + 6

请参阅手册页以获取更多表达。

答案 3 :(得分:0)

您不能在=之前或之后放置空格,或者bash尝试执行命令$((10*5))(即50),同时将Var1设置为空字符串在本地环境中。此外,使用没有美元符号(…)的单个括号调用子shell,美元符号$(…)调用子shell并用命令的输出替换,并且美元符号在算术表达式中是可选的

所以你想要做的是:

#!/bin/bash
Var1=$((10*5))
Var2=$((10/5))
Var3=$((10-5))
Var4=$((10+5))
Var5=$((Var4*Var3))
echo $Var1
echo $Var2
echo $Var3
echo $Var4
echo $Var5
相关问题