linux - 我怎样才能在 bash 中做基础数学?

标签 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 中执行简单的数学运算?

(请使其易于理解 - 请假设我是一个非程序员且愚蠢的人)

最佳答案

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 语句中使用。

关于linux - 我怎样才能在 bash 中做基础数学?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27085013/

相关文章:

linux - 我将如何实现搜索功能来查找文件或目录

python - 防止换行符被逐字读取到 python 脚本中

linux - 如何从 bash 制作批处理脚本

linux - Netcat反向shell

linux - linux使用符号链接(symbolic link)时如何使原文件不被删除

从 crond 启动时出现 PHP 段错误

linux - PostgreSQL 不会自动使用可用 RAM 进行内存密集型查询

bash - 在 bash 的行尾/中间自动完成

shell - 未找到 neo4j-shell-tools、neo4j-shell 自动索引和导入命令

linux - 将一段文本从 stdin 粘贴到文件中的特定位置