我做了一些我认为应该是一个名为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中执行简单的数学运算?
(请让这个易于理解 - 请假设我是非程序员和愚蠢的人)
答案 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