shell 计算器的实现示例

 更新时间:2024年01月02日 09:37:35   作者:一只勤劳的耗子  
在使用Linux时,我们有时会需要做一些计算,那么我们就可能需要用到计算器,本文主要介绍了shell 计算器的实现示例,具有一定的参考价值,感兴趣的可以了解一下

简介

shell 编程中的 $(( )) 、$[ ] 和 expr 仅支持整数运算,不支持小数运算,如果除法的结果为小数,那么按取整处理。小数计算需要依赖命令,这里介绍 bc、awk 两个命令的计算方法。

1. 整数计算

常用符号如下:

+:加法
-:减法
*:乘法
/:除法
^:幂运算
%:取余

shell 通过 $(( )) 或 $[ ] 来计算整数,比如 1+1

echo $(( 1 + 1 ))
echo $[ 1 + 1 ]

但如果将0作为除数,那么直接报错

如果计算中出现非变量的字母,那么这个字母会被当做 0 处理

        

注意:$(( )) 和 $[ ] 不支持小数运算,如果除法运算的结果为小数,那么系统自动取整

echo $(( 10 / 3 ))

括号中支持变量计算

对变量做运算(修改变量)

# 定义一个变量
n=10

# 将变量+1
(( n++ ))

# 查看这个变量的结果
echo ${n}

直接对变量做计算可以直接使用 (( )),举几个常用的方法

(( n++ ))    # 表示变量n+1
(( n-- ))    # 表示变量n-1
(( n+=5 ))   # 表示变量n+5
(( n-=5 ))   # 表示变量n-5
(( n*=5 ))   # 表示变量n*5
(( n1 = n2 + 1 ))    # 表示变量n1 = 变量n2 + 1

所有的计算 n=n+1 都可以简化成 n+=1,其他计算方式同理。  

除了直接使用 $(( )) 或 $[ ] 来运算,shell 还支持 expr 来运算整数(方法都一样)

expr [数字1] [运算符号] [数字2]

2. 小数计算

由于 $(( )) 和 $[ ] 不支持小数运算,我们需要借助其他命令来实现。这里介绍2个命令 bc 和 awk

2.1. bc 命令计算

bc 是 Linux 中一个用于计算的命令,支持高精度的数学计算,可以进行大多数基本的数学运算,包括加、减、乘、除、取模、指数、三角函数等。

执行 bc 会出现一个交互界面(quit 退出)

在这个交互界面中可以执行数学运算,回车键表示 "="

在脚本中我们一般不会用到交互界面,那么可以使用 bc 结合 echo 来使用。比如计算 1+1

echo "1 + 1" |bc

使用 echo 输出一串字符,再使用管道符传递给 bc 使其计算。就类似于这样

如果不指定小数点位数,除法的结果为小数也会直接取整

echo "10 / 3" |bc

如果需要显示小数位数,那么在 echo 中指定 scale=n(n表示位数)

echo "scale=2; 10 / 3" |bc

2.2. awk 命令计算

awk 命令本身是用于文件操作,由于功能强大,但也支持计算。

比如计算:1 + 1

awk 'BEGIN{print 1 + 1}'

awk 本身是对文件操作,如果不指定文件需要加上 BEGIN 字符来实现计算。      

awk 也支持小数(默认保留5为)

awk 'BEGIN{print 10 / 3}'

指定2位小数

awk 'BEGIN{printf "%.2f", 10 / 3}'

使用变量

a=10
b=20
awk -v "a=${a}" -v "b=${b}" 'BEGIN{printf "%.2f", a / b}'

由于 awk 中使用的是单引号,无法转译变量,所以只能通过 -v 定义两个属于 awk 本身的变量,再执行计算。也可以直接使用变量,但需要将 awk 外围的单引号换成双引号,里面的双引号需要转译

a=10
b=20
awk "BEGIN{printf \"%.2f\", ${a} / ${b}}"

也支持文件中的数据计算

【求和】

awk '{sum+=$1} END{print sum}' 文件名

【求平均数】

awk '{sum += $1} END{print sum/NR}' 文件

【求最大值】

awk 'NR==1 {max=$1} $1>max {max=$1} END{print max}' 文件

【求最小值】

awk 'NR==1 {min=$1} $1<min {min=$1} END {print min}' 文件名

【将第1列的所有值 +10 】

awk '{print $1 + 10}' 文件名

【读取文件偶数行】

awk 'NR % 2 == 0' 文件名

到此这篇关于shell 计算器的实现示例的文章就介绍到这了,更多相关shell 计算器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

您可能感兴趣的文章:

相关文章

  • 用shell脚本防ssh和vsftpd暴力破解的详解讲解

    用shell脚本防ssh和vsftpd暴力破解的详解讲解

    新近刚上的FTP备份服务器,例行检查/var/log/secure日志时,发现不少sshd和vsftpd失败认证信息,很明显有人想用暴力破解工具窃取密码,所以需要编写一个安全脚本防止
    2014-01-01
  • Linux 分区初始化为物理卷,把物理卷加入卷组的方法

    Linux 分区初始化为物理卷,把物理卷加入卷组的方法

    下面小编就为大家带来一篇Linux 分区初始化为物理卷,把物理卷加入卷组的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • shell wait等待命令的具体使用

    shell wait等待命令的具体使用

    本文主要介绍了shell wait等待命令的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • 编写shell脚本将VPS上的数据备份到Dropbox网盘的方法

    编写shell脚本将VPS上的数据备份到Dropbox网盘的方法

    这篇文章主要介绍了编写shell脚本将VPS上的数据备份到Dropbox网盘的方法,注意Dropbox在国内访问的网络相关问题,需要的朋友可以参考下
    2015-07-07
  • linux 环境 mysql写入中文报错

    linux 环境 mysql写入中文报错

    本篇文章主要介绍了linux 环境 mysql写入中文报错的相关知识。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-04-04
  • Shell 批量进程判断是否存在

    Shell 批量进程判断是否存在

    本文主要介绍了Shell 批量进程判断是否存在,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • 深入理解Shell输出颜色与控制

    深入理解Shell输出颜色与控制

    在Linux shell或者平时echo输出时有时为了区分某些字符串的重要性,往往对其输出内容添加颜色以醒目区分。下面这篇文章就主要介绍了关于Shell输出颜色与控制,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-12-12
  • Linux下文件剪切的shell脚本实现代码

    Linux下文件剪切的shell脚本实现代码

    本篇文章主要介绍了Linux下文件剪切的sh脚本实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • 查看linux服务器上jdk的安装路径方法

    查看linux服务器上jdk的安装路径方法

    这篇文章主要介绍了查看linux服务器上jdk的安装路径方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • 在linux上定期执行命令、脚本(cron,crontab,anacron)

    在linux上定期执行命令、脚本(cron,crontab,anacron)

    在linux下,如果想要在未来的某个时刻执行某个任务,并且在未来的每一个这样的时刻里都要执行这个任务。这篇文章主要介绍了在linux上定期执行命令、脚本(cron,crontab,anacron)的相关知识,需要的朋友可以参考下
    2018-07-07

最新评论