Linux Shell 数学运算
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 数学运算的更多相关文章
- Shell初学(六)Linux Shell 时间运算以及时间差计算方法
Linux Shell 时间运算以及时间差计算方法 时间的加减,以及时间差的计算. 1. 时间加减 这里处理方法,是将基础的时间转变为时间戳,然后,需要增加或者改变时间,变成 秒. 如:1990-01 ...
- Linux shell 整数运算 let [ ] (( )) expr以及 浮点数 bc用法(转)
Abstract : 1) Linux shell 中使用 let , [ ] ,(( )) 三种运算符操作 shell 变量进行简单的基本运算:2)Linux shell 中使用 expr 与 b ...
- shell 数学运算
数学运算之 expr expr操作符对照表 比较大小,只能对整数进行比较,需要加空格,linux 保留关键字要转义 num1=30 num2=50 expr $num1 \> $num2 查看上 ...
- 7 shell 数学运算
shell中数学运算的易错点: 1.在 Bash Shell 中,如果不特别指明,每一个变量的值都是字符串,无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储.即使是将整数和小数赋值给变量,它 ...
- shell数学运算
shell的数学运算 branches@ubuntu:~$ var1=$[ * ] branches@ubuntu:~$ echo $var1 branches@ubuntu:~$ var2=$[$v ...
- 【Linux】shell数学运算
在Bash shell环境中,可以利用let.(())和[]执行基本的算术操作.而在进行高级操作时,expr和bc这两个工具就特别有用 let的使用 Script01.sh #!/bin/bash # ...
- shell 数学运算总结
# !/bin/bash ## 整数-算数运算 ### 1. expr r=`expr 4 + 5` ### Tips:1. '4''+''5'三者之间有空白 echo $r; r=`expr 4 \ ...
- shell编程之数学运算
shell数学运算支持整数运算的四种方法 1.let命令 no1=4; no2=5; let result=no1+no2 2.[]操作符 result=$[ no1 + no2] 3.(())操作符 ...
- shell执行数学运算
整数: expr let $(()) $[] 浮点数: bc 1.使用expr ♦参与运算的成员和运算符之间必须有一个空格: ♦对于那些容易被shell错解的,在它们传入expr命令之前,需要使用sh ...
随机推荐
- The 5th Zhejiang Provincial Collegiate Programming Contest------ProblemK:Kinds of Fuwas
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1974 题意:问四个角都有同一个福娃的矩形有多少个. #include<b ...
- 用css制作三角形
用css制作三角形,主要是利用css元素给“盒模型”设置边框得到的. 上图,上边框和做边框,以及上边框和右边框的交合处,浏览器会按照直角的二分之一处绘制交合线.这是“盒模型”有宽和高时候的效果.我们假 ...
- glibc库详解及与POSIX,system V这些库之间关系的说明
自己想了解下关于system v,在网上看到一篇详细的说明,与大家分享一下,原文地址http://hi.baidu.com/tekuba/item/570887775696542e5c178918 以 ...
- thinkphp 定制错误页面
在前台配置文件里加上: 'TMPL_EXCEPTION_FILE' => '.Public/tpl/error.html',// 异常cuowu页面的模板文件 然后在Public下新建一个tpl ...
- IOS - IOS之同步请求、异步请求、GET请求、POST请求
1.同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作, 2.异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然 ...
- P125、面试题19:二叉树的镜像
题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像二叉树结点的定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTr ...
- PHP+Mysql无限分类的方法汇总
无限分类是个老话题了,来看看PHP结合Mysql如何实现.第一种方法这种方法是很常见.很传统的一种,先看表结构表:categoryid int 主键,自增name varchar 分类名称pid in ...
- 谈谈javascript插件的写法
插件顾名思义就是能在一个页面多处使用, 各自按自己的参数配置运行, 并且相互不会冲突. 会写javascript插件是进阶js高级的必经之路, 也是自己所学知识的一个典型的综合运用. 如果你还没头绪, ...
- 函数fsp_alloc_seg_inode
从inode page中申请inode entry inode = fsp_alloc_seg_inode(space_header, mtr); /************************* ...
- mssql查找备注(text,ntext)类型字段为空的方法
在sql语句中,如果查找某个文本字段值为空的,可以用select * from 表 where 字段='' ,但是如果这个字段数据类型是text或者ntext,那上面的sql语句就要出错了. 解决办法 ...