Linux Shell 数学运算

在Linux中直接使用数学运算符进行数学运算往往得不到我们想要的计算结果。要在Shell中进行数学运算,我们需要借助点小手段。目前,Linux Shell中进行数学运算的方法主要有三种:bc、expr、let。

1 bc

1.1 命令行方式

在bash界面,直接输入bc或者bc -q,就可以进去bc的命令行,通过使用数学运算符能够得到我们想要的结果:

 [scott@centos1 ~]$ bc -q

 +

 -

 -

 *

 /

 %

 ^

 scale=;/

 .

 %

 scale=;/

 %

输入运算数和运算符号,回车即可得到运算结果。通过设置scale,可以定义当前的小数点精度,对除法、取余和幂运算有效。

这种方式只能在bc的命令行中进行,在代码中当然不能这样干了。

1.2 管道方式

 [scott@centos1 ~]$ echo +|bc

 [scott@centos1 ~]$ echo -|bc

 -

 [scott@centos1 ~]$ echo *|bc

 [scott@centos1 ~]$ echo /|bc

 [scott@centos1 ~]$ echo %|bc

 [scott@centos1 ~]$ echo "scale=2;2/3"|bc

 .

 [scott@centos1 ~]$ echo "scale=2;2%3"|bc

 .

 [scott@centos1 ~]$ echo "scale=2;3/2"|bc

 1.50

 [scott@centos1 ~]$ echo "scale=2;3%2"|bc

 [scott@centos1 ~]$ echo ^|bc

这种管道方式在shell中应用的更多一些,同样可以在运算的时候加上精度的限制。

1.3 进制转换

 [scott@centos1 ~]$ echo "ibase=10;15"|bc

 [scott@centos1 ~]$ echo "ibase=8;15"|bc

 [scott@centos1 ~]$ echo "ibase=16;F"|bc

上文的例子,是把几种进制都转化为10进制。

1.4 表达式运算

 [scott@centos1 ~]$ vim bc-test.bc

 [scott@centos1 ~]$ bc -q bc-test.bc

 -

 .

其中,bc-test.bc的内容为:

+

-

*

/

scale=;/

scale=;/

就是表达式的集合。

2 expr

expr是个很强大的命令,可以进行数学运算,也可以进行字符串的操作等。先看下数学运算的功能。

 [scott@centos1 ~]$ expr +

 +

 [scott@centos1 ~]$ expr  +

 expr: syntax error

 [scott@centos1 ~]$ expr  + 

 [scott@centos1 ~]$ expr  * 

 expr: syntax error

 [scott@centos1 ~]$ expr  \* 

 [scott@centos1 ~]$ expr  / 

 [scott@centos1 ~]$ expr  % 

expr不支持浮点运算,不支持幂乘运算,在运算的时候可要注意运算符和运算数的分离,写在一起可是不识别的,另外,乘法有点特殊,需要转义。

下面看看expr的字符串操作。

 [scott@centos1 ~]$ string=123456789asdfg

 [scott@centos1 ~]$ expr length $string

 [scott@centos1 ~]$ expr index $string ''

 [scott@centos1 ~]$ expr substr $string  

 789a

 [scott@centos1 ~]$ expr substr $string  

 789asdfg

上例分别利用expr命令进行了计算字符串长度、获取字串或者字符的首次出现位置、取指定位置开始的限定长度的字符字串,需要注意的是expr中的下标是从1开始的。

3 let

 [scott@centos1 ~]$ let a=+

 [scott@centos1 ~]$ echo $a

 [scott@centos1 ~]$ let a=*

 [scott@centos1 ~]$ echo $a

 [scott@centos1 ~]$ let a=/

 [scott@centos1 ~]$ echo $a

 [scott@centos1 ~]$ let a=%

 [scott@centos1 ~]$ echo $a

 [scott@centos1 ~]$ let a=^

 [scott@centos1 ~]$ echo $a

 [scott@centos1 ~]$ let a=**

 [scott@centos1 ~]$ echo $a

需要注意的是,let命令里的幂乘运算不是^,而是**。

4 其他方式

 [scott@centos1 ~]$ echo $((+))

 [scott@centos1 ~]$ echo $((*))

 [scott@centos1 ~]$ echo $((**))

 [scott@centos1 ~]$ echo $((((+))*))

 [scott@centos1 ~]$ echo `date`

 Fri Aug  :: PDT 

 [scott@centos1 ~]$ echo `date +%Y%m%d`

Linux Shell 数学运算的更多相关文章

  1. Shell初学(六)Linux Shell 时间运算以及时间差计算方法

    Linux Shell 时间运算以及时间差计算方法 时间的加减,以及时间差的计算. 1. 时间加减 这里处理方法,是将基础的时间转变为时间戳,然后,需要增加或者改变时间,变成 秒. 如:1990-01 ...

  2. Linux shell 整数运算 let [ ] (( )) expr以及 浮点数 bc用法(转)

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

  3. shell 数学运算

    数学运算之 expr expr操作符对照表 比较大小,只能对整数进行比较,需要加空格,linux 保留关键字要转义 num1=30 num2=50 expr $num1 \> $num2 查看上 ...

  4. 7 shell 数学运算

    shell中数学运算的易错点: 1.在 Bash Shell 中,如果不特别指明,每一个变量的值都是字符串,无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储.即使是将整数和小数赋值给变量,它 ...

  5. shell数学运算

    shell的数学运算 branches@ubuntu:~$ var1=$[ * ] branches@ubuntu:~$ echo $var1 branches@ubuntu:~$ var2=$[$v ...

  6. 【Linux】shell数学运算

    在Bash shell环境中,可以利用let.(())和[]执行基本的算术操作.而在进行高级操作时,expr和bc这两个工具就特别有用 let的使用 Script01.sh #!/bin/bash # ...

  7. shell 数学运算总结

    # !/bin/bash ## 整数-算数运算 ### 1. expr r=`expr 4 + 5` ### Tips:1. '4''+''5'三者之间有空白 echo $r; r=`expr 4 \ ...

  8. shell编程之数学运算

    shell数学运算支持整数运算的四种方法 1.let命令 no1=4; no2=5; let result=no1+no2 2.[]操作符 result=$[ no1 + no2] 3.(())操作符 ...

  9. shell执行数学运算

    整数: expr let $(()) $[] 浮点数: bc 1.使用expr ♦参与运算的成员和运算符之间必须有一个空格: ♦对于那些容易被shell错解的,在它们传入expr命令之前,需要使用sh ...

随机推荐

  1. uva 10986

    ford 超时  使用优先队列的Dijkstra 算法 //#include <cstdio> //#include <cstring> //#include <algo ...

  2. eclipse查看jar包中class的中文注释乱码问题的解决

    1,问题来源是在eclipse中直接查看springside的class(由eclipse自动反编译)里面注释的乱码问题: Preferences-General-Workspace-Text fil ...

  3. 李洪强iOS开发之【零基础学习iOS开发】【02-C语言】07-基本数据类型

    C语言有丰富的数据类型,因此它很适合用来编写数据库,如DB2.Oracle等大型数据库都是C语言写的.其中,提供了4种最常用的基本数据类型:char.int.float.double,使用这些数据类型 ...

  4. Discuz模版与插件 安装时提示“对不起,您安装的不是正版应用...”解决方法

    关于出现“对不起,您安装的不是正版应用..”的解决办法 有些插件和风格在安装时出现不能安装的现象,出现以下提示:       对不起,您安装的不是正版应用,安装程序无法继续执行       点击这里安 ...

  5. 镜面电火花EDM加工技术资料,模具行业的人应该好好看看!

    目前镜面电火花加工技术在精密型腔模具制造中逐步得以推广.本文就企业中镜面电火花加工应用的关键环节,结合实践分析了影响镜面加工性能的因素.通过控制各个工艺环节,可有效实现高质量.高效率的镜面电火花加工. ...

  6. NFS - Network File System网络文件系统

    NFS(Network File System/网络文件系统): 设置Linux系统之间的文件共享(Linux与Windows中间文件共享采用SAMBA服务): NFS只是一种文件系统,本身没有传输功 ...

  7. python-append()方法

    append() 方法向列表的尾部添加一个新的元素.只接受一个参数. >>> mylist = [1,2,3,4] >>> mylist [1, 2, 3, 4] ...

  8. WPF控件模板和数据模板

    来自:http://www.th7.cn/Program/WPF/2011/12/21/51676.shtml ControlTemplate用于描述控件本身. 使用TemplateBinding来绑 ...

  9. 编程之美 3.1 字符串移位包含问 复杂度(O(N*K)

    分享关于编程之美3.1自己编写的代码,很简单. s2.沿着s1匹配(循环匹配,利用%Length技巧),匹配上,返回true. //BOP3.1 char src[] = "AABBCD&q ...

  10. Android开发之 android:windowSoftInputMode属性详解

    android:windowSoftInputMode activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性. 这个属性能影响两件事情: [一] ...