Linux shell实现 四则运算(整数及浮点) 简单方法

本文介绍了Linux shell中使用$(())执行表达式运算的方法,并详细解释了expr命令的用法,包括四则运算、条件判断、大小判断和文字处理。此外,还讨论了Linux shell对浮点运算的支持限制,以及如何通过bc或awk进行浮点运算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.简单方法

[chengmo@centos5 ~]$ b=$((5*5+5-3/2)) 
[chengmo@centos5 ~]$ echo $b
29

在linux shell中,我们可以使用 $(()) 将表达式放在括号中,即可达到运算的功能。

2.其它方法:

用:expr 实现运算

[chengmo@centos5 ~]$ expr 5 - 4
1

注意:将需要运算的表达式写入在expr 后面即可,保证 参数与运算符号中间有空格隔开。

 

类别语法说明
条件判断expr1 \| expr2如果 expr1 不是零或 null 则传回 expr1,否则传回 expr2。
expr1 \& expr2如果 expr1 及 expr2 都不为零或 null,则传回 expr1,否则传回 0。
四则运算expr1 + expr2传回 expr1 加 expr2 后的值。
expr1 - expr2传回 expr1 减 expr2 后的值。
expr1\* expr2传回 expr1 乘 expr2 后的值。
expr1 / expr2传回 expr1 除 expr2 后的值。
expr1 % expr2传回 expr1 除 expr2 的余数。
大小判断expr1 \> expr2如果 expr1 大于 expr2 则传回 1,否则传回 0。如果 expr1 及 expr2 都是数字,则是以数字大小判断,否则是以文字判断。以下皆同。
expr1 \< expr2如果 expr1 小于 expr2 则传回 1,否则传回 0。
expr1 = expr2如果 expr1 等于 expr2 则传回 1,否则传回 0。
expr1 != expr2如果 expr1 不等于 expr2 则传回 1,否则传回 0。
expr1 \>= expr2如果 expr1 大于或等于 expr2 则传回 1,否则传回 0。
expr1 \<= expr2如果 expr1 小于或等于 expr2 则传回 1,否则传回 0。
文字处理expr1 : expr2比较一固定字符串,即 regular expression。可以使用下列字符来辅助:

. 匹配一个字符。

$ 找字符串的结尾。

[list] 找符合 list 中的任何字符串。

* 找寻 0 个或一个以上在 * 之前的字。

\( \) 传回括号中所匹配的字符串。

3.浮点运算:

[chengmo@centos5 ~]$ expr 5.0 - 4
expr: 非法参数

[chengmo@centos5 ~]$ echo $((5.0-4))
-bash: 5.0-4: syntax error in expression (error token is ".0-4")

从上面运算结果,看来上面表达式,不足以支持浮点运算了。查阅资料才发现:bash 不支持浮点运算,如果需要进行浮点运算,需要借助bc,awk 处理。

 

方法一:

[chengmo@centos5 ~]$ c=$(echo "5.01-4*2.0"|bc)
[chengmo@centos5 ~]$ echo $c
-2.99

方法二:

[chengmo@centos5 ~]$ c=$(awk 'BEGIN{print 7.01*5-4.01 }')
[chengmo@centos5 ~]$ echo $c
31.04

 

注:在shell 中$() 与 ``等效。 中间包含命令语句执行,返回执行结果。

<think>嗯,用户问的是Linux下计算器的加减乘除代码。首先,我需要确定用户指的是哪种计算器。可能是在命令行下用脚本或者命令实现基本的四则运算。常见的方法有使用expr、bc、awk,或者shell的内置算术扩展。 用户可能对Linux不太熟悉,所以需要分步骤解释不同的方法。比如,expr是比较老的命令,但需要注意空格和运算符的转义。比如加法expr 2 + 3,乘号需要转义为\*。然后,bc计算器更强大,支持浮点运算,可以用echo "2+3" | bc。还有算术扩展$((表达式)),适合整数运算,比如echo $((2*3))。 还要考虑到用户可能需要处理浮点数的情况,这时候bc就比较合适了。另外,可能用户想写一个简单的脚本,接收输入然后计算。可能需要举例说明如何用read命令获取输入,然后用bc处理。 另外,用户可能对shell脚本的基础不太了解,所以需要详细解释每个步骤,比如变量赋值、命令替换等。比如,写一个脚本,让用户输入两个数字和运算符,然后输出结果。 还要注意不同方法之间的区别,比如expr只能处理整数,而bc可以处理浮点。算术扩展也是整数运算。可能用户需要的是简单的命令行使用,或者是一个可重复使用的脚本。 可能需要检查用户是否有其他需求,比如错误处理,输入验证,但用户的问题看起来比较基础,可能先提供几种常用方法,再给一个脚本示例比较合适。比如: 1. 使用expr 2. 使用bc 3. 使用算术扩展 4. 使用awk 然后给出每种方法的例子,最后写一个简单的脚本,接受参数进行计算。 还要注意语法中的细节,比如expr中运算符周围的空格,乘号的转义,bc中表达式的格式。在脚本中,如何引用变量,使用$1, $2等位置参数。 可能用户是在学习shell编程,所以需要解释清楚每个部分的作用。比如,#!/bin/bash,变量的读取,运算符的判断,以及如何调用bc处理。 总结,应该分步骤介绍不同的方法,给出示例代码,并说明优缺点,比如是否支持浮点,是否需要转义等。最后提供一个综合的脚本示例,帮助用户快速实现计算器功能。</think>在Linux系统中实现加减乘除计算主要有以下几种方式,以下分别介绍原理并给出示例代码: 1. **使用`expr`命令**(仅整数) ```bash # 加法 expr 5 + 3 # 减法 expr 10 - 4 # 乘法(需要转义*号) expr 6 \* 7 # 除法(取整) expr 15 / 4 ``` 2. **使用双括号算术扩展**(仅整数) ```bash echo $((5 + 3)) # 加法 echo $((10 - 4)) # 减法 echo $((6 * 7)) # 乘法 echo $((15 / 4)) # 整除 echo $((15 % 4)) # 取余 ``` 3. **使用`bc`计算器**(支持浮点) ```bash # 基础计算 echo "5 + 3" | bc # 8 echo "10.5 - 4.2" | bc # 6.3 echo "6 * 7" | bc # 42 echo "scale=2; 15/4" | bc # 3.75(保留两位小数) # 复杂计算 echo "3.14 * (5^2)" | bc -l # 78.5(-l加载数学库) ``` 4. **使用awk命令**(支持浮点) ```bash awk 'BEGIN{printf "%.2f\n", (10.5 + 3.2)}' # 13.70 awk 'BEGIN{print 6 * 7}' # 42 ``` 5. **交互式计算脚本** ```bash #!/bin/bash echo "简易计算器(支持+-*/)" read -p "输入第一个数字: " num1 read -p "输入运算符: " op read -p "输入第二个数字: " num2 result=$(echo "scale=4; $num1 $op $num2" | bc) echo "结果: $num1 $op $num2 = $result" ``` 6. **命令行参数版脚本** ```bash #!/bin/bash if [ $# -ne 3 ]; then echo "用法: ./calculator.sh 数字1 运算符 数字2" exit 1 fi case $2 in +|-|*|/) ;; *) echo "错误:仅支持+-*/运算符" && exit 1 ;; esac echo "scale=4; $1 $2 $3" | bc ``` **使用示例:** ```bash # 保存为calculator.sh后 chmod +x calculator.sh ./calculator.sh 12.5 + 3.8 # 16.3 ./calculator.sh 10 / 3 # 3.3333 ``` **扩展知识:** - `scale=4`设置bc的小数精度为4位 - `bc -l`会加载标准数学库(支持sin/cos等函数) - 使用`printf "%.2f"`可以格式化输出结果 - 对于复杂计算,推荐使用`bc`或`awk` - 整数运算推荐`$(( ))`算术扩展,效率最高 建议根据实际需求选择合适的方法,需要浮点运算时优先使用`bc`计算器,简单整数运算使用算术扩展更高效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值