expr

语法

注意必须有空格

只能精确到整数,无法精确到浮点数

操作符对照表

使用expr命令时需要加\进行转义,因为部分符号是保留关键字

例1:比较num1跟num2的大小

[root@localhost ~]# num1=30
[root@localhost ~]# num2=50
[root@localhost ~]# expr $num1 \> $num2
0
[root@localhost ~]# num3=`expr $num1 \> $num2`

其余以此类推

例2:使用$(())求积

注意*会自动转义,不需要转义符号

不能进行等于,不等于运算,所以比较运算建议使用expr命令

[root@localhost ~]# num1=30
[root@localhost ~]# num2=20
[root@localhost ~]# echo $(($num1*$num2))
600

练习题

要求:提示用户输入一个正整数num,计算1+2+3+…+num的值。

需要判断是否为整数

[root@localhost ~]# num1=56.1
[root@localhost ~]# expr $num1 + 1
expr: 非整数参数
[root@localhost ~]# echo $?
2
#可以看到报错,输出结果为2
[root@localhost ~]# num1=56
[root@localhost ~]# expr $num1 + 1
57
[root@localhost ~]# echo $?
0
#输出结果为0表示执行成功

答案

[root@localhost ShellScript]# cat example_4.sh
#!/bin/bash
while true
do
read -p "pls input a positive number:" num
expr $num + 1 &> /dev/null
if [ $? -eq 0 ];then
if [ `expr $num \> 0` -eq 1 ];then
for((i=1;i<=$num;i++))
do
sum=`expr $sum + $i`
done
echo "1+2+3+...+$num=$sum"
exit
fi
fi
echo "error,input enlegal"
done

答案

bc

语法

bc是bash自带的运算器,支持浮点数运算

如果不指定scale变量,默认还是得到的整数

自带变量scale可以设置,默认为0,也就是为整型

支持+,-,*,/,%,^运算

num1 + num2
num1 - num2
num1 * num2
num1 / num2
num1 % num2
num1 ^ num2 //指数运算

例子

输入bc回车进入互动模式

[root@localhost ShellScript]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
5+5
10
5/3
1
scale=2  //保留小数点后两位
23/5
4.60

或者

[root@localhost ShellScript]# echo "12+45" | bc
57

通过scale设置精确度

[root@localhost ShellScript]# echo "scale=4;12.56*45.88" | bc
576.2528

简易到爆的乘法计算器

[root@localhost ShellScript]# cat bc.sh
#!/bin/bash read -p "num1:" num1
read -p "num2:" num2
echo "scale=4;$num1*$num2" | bc
或者
num3=`echo "scale=4;$num1*$num2" | bc`
echo $num3

bash数学运算之bc的更多相关文章

  1. SHELL脚本--数学运算和bc命令

    bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 使用let.(()).$(())或$[]进行基本的整数运算,使 ...

  2. Shell bash 数学运算 bc

    1.bc命令可以完成浮点数的运算.其中 scale可以指定保留的小数点位数. 2.举例 例1: 例2:

  3. Linux shell 变量 数学 运算

    Abstract : 1)  Linux shell 中使用 let , [ ] ,(( )) 三种运算符操作 shell 变量进行简单的基本运算: 2)Linux shell 中使用 expr 与 ...

  4. 哪一个 bash 内置命令能够进行数学运算?

    bash shell 的内置命令 let 可以进行整型数的数学运算. #! /bin/bash--let c=a+b--

  5. 哪一个 bash 内置命令能够进行数学运算?

    bash shell 的内置命令 let 可以进行整型数的数学运算. #! /bin/bash - - let c=a+b - -

  6. Linux Shell 数学运算

    Linux Shell 数学运算 在Linux中直接使用数学运算符进行数学运算往往得不到我们想要的计算结果.要在Shell中进行数学运算,我们需要借助点小手段.目前,Linux Shell中进行数学运 ...

  7. 在终端(Terminal)里用命令行进行数学运算

    有时候我们进行一些数学运算,我们会去开系统自带的计算来做这件事情,其实我们也可以直接在终端里面用命令行进行的. 在命令行里敲 bc 进入数学计算模式,然后随便输入数学表达式 回车 ,结果就出来了,是不 ...

  8. shell脚本中的数学运算

    shell中的赋值和操作默认都是字符串处理,在此记下shell中进行数学运算的几个特殊方法.以后用到的时候能够来看,呵呵 1.错误方法举例 a) var=1+1 echo $var 输出的结果是1+1 ...

  9. Linux编程 22 shell编程(输出和输入重定向,管道,数学运算命令,退出脚本状态码)

    1. 输出重定向 最基本的重定向是将命令的输出发送到一个文件中.在bash shell中用大于号(>) ,格式如下:command > inputfile.例如:将date命令的输出内容, ...

随机推荐

  1. Redis主从结构主节点执行写入后wait命令对性能的影响

    这里的Redis主从结构可以是简单的主从,sentinel,redis cluster中的主从等. wait命令的作用:此命令将阻塞当前客户端,直到当前Session连接(主节点上)所有的写命令都被传 ...

  2. 到2029年MRAM收入将增长170倍

    一份新市场报告预计,从2018年到2029年,独立MRAM和STT-MRAM的收入将增长170倍,达到近40亿美元的收入.下一代内存技术的增长将主要由取代效率较低的内存技术(例如NOR闪存和SRAM) ...

  3. FIB表与RIB表的区别与联系

    RIB (route information base) 和 FIB (forwarding information base),又称Ip路由表 和 CEF表,它们之间的关系可以用下面这张图片来高度概 ...

  4. findContours()函数

    函数原型 findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int m ...

  5. 牛客网剑指offer第19题——顺时针打印矩阵

    这个题看似很简单: 题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 ...

  6. requests库爬取需要登录的网站

    #!usr/bin/env python #-*- coding:utf-8 _*- """ @author:lenovo @file: 登录人人网.py @time: ...

  7. IDEA安装Flutter遇到的坑

    环境: ①IDEA2019.3.3 ②JAVA12 ③Android-SDK29.0.3 ④Flutter1.14.6 ⑤WINDOWS10.0.18363.657 ⑥AL10实体机,Android8 ...

  8. ls, chgrp, chown, chmod

    ls命令 [root@client ~]# ls -la 总用量 dr-xr-x---. root root 2月 : . dr-xr-xr-x. root root 2月 : .. -rwxrwxr ...

  9. STL-queue 队列

    #include <iostream> #include <queue> using namespace std; int main() { // queue也很简单 // p ...

  10. 使用FRP做内网穿透

    Github地址:https://github.com/fatedier/frp 什么是FRP? frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 h ...