Shell——数学计算

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

b) 
var=1 
var=$var+1 
echo $var 
输出结果是1+1,依然悲剧,呵呵

2、正确方法 
1)使用let 
var=1 
let "var+=1" 
echo $var 
输出结果为2,这次没有悲剧 
注意: 
a)经我测试let几乎支持所有的运算符,在网上看到一篇文章说“let不支持++、--和逗号、(、)”,但经我测试自加、自减、以及括号的优先级都得到了很好的支持 
b)方幂运算应使用“**” 
c)参数在表达式中直接访问,不必加$ 
d)一般情况下算数表达式可以不加双引号,但是若表达式中有bash中的关键字则需加上 
e)let后的表达式只能进行整数运算

2)使用(()) 
var=1 
((var+=1)) 
echo $var 
输出结果为2 
注意: 
(())的使用方法与let完全相同

3)使用$[] 
var=1 
var=$[$var+1] 
echo $var 
输出结果位2 
注意: 
a)$[]将中括号内的表达式作为数学运算先计算结果再输出 
b)对$[]中的变量进行访问时前面需要加$ 
c)$[]支持的运算符与let相同,但也只支持整数运算

4)使用expr 
var=1 
var=`expr $var + 1` 
echo $var 
输出结果为2 
注意: 
a)expr后的表达式个符号间需用空格隔开 
b)expr支持的操作符有: |、&、<、<=、=、!=、>=、>、+、-、*、/、% 
c)expr支持的操作符中所在使用时需用\进行转义的有:|、&、<、<=、>=、>、* 
e)expr同样只支持整数运算

5)使用bc(可以进行浮点数计算) 
var=1 
var=`echo "$var+1"|bc` 
echo $var 
输出结果为2 
介绍: 
bc是linux下的一个简单计算器,支持浮点数计算,在命令行下输入bc即进入计算器程序,而我们想在程序中直接进行浮点数计算时,利用一个简单的管道即可解决问题。 
注意: 
1)经我测试bc支持除位操作运算符之外的所有运算符。 
2)bc中要使用scale进行精度设置 
3)浮点数计算实例 
var=3.14 
var=`echo "scale=2;$var*3"|bc` 
echo $var 
输出结果为9.42

6)使用awk(可已进行浮点数计算) 
var=1 
var=`echo "$var 1"|awk ‘{printf("%g",$1*$2)}‘` 
echo $var 
输出结果为2 
介绍: 
awk是一种文本处理工具,同时也是一种程序设计语言,作为一种程序设计语言,awk支持多种运算,而我们可以利用awk来进行浮点数计算,和上面bc一样,通过一个简单的管道,我们便可在程序中直接调用awk进行浮点数计算。 
注意: 
1)awk支持除微操作运算符之外的所有运算符 
2)awk内置有log、sqr、cos、sin等等函数 
3)浮点数计算实例 
var=3.14 
var=`echo "$var 2"|awk ‘{printf("%g",sin($1/$2))}‘` 
echo $var 
输出结果为1 
3、总结 
终于把所有能搜集到的资料看完,并最后总结出一套自己的东西了,以后再遇到类似问题就有的看了,哈哈~

时间: 2024-11-08 21:39:25

Shell——数学计算的相关文章

bash/shell 数学计算

$ echo $((20.0/7)) $ zcalc $ bc <<< 20+5/2 $ bc <<< 'scale=4;20+5/2' $ expr 20 + 5 $ calc 2 + 4 $ node -pe 20+5/2 # Uses the power of JavaScript, e.g. : node -pe 20+5/Math.PI $ echo 20 5 2 / + p | dc $ echo 4 k 20 5 2 / + p | dc $ perl -

[笔记]shell编程:数学计算

在shell Script中,有好几种进行数学运算的方法,虽然有几个效果差不多,在编写程序的时候使用一种方法就够了,但是我们可能还需要学习别人的程序啊,在阅读别人的程序的时候不能不认识这些东西吧.所以,留个笔记. 一.expr 命令  --  expr 允许在命令行上处理数学表达式,但是略显拙劣. 例:$ expr 1 + 5    #注意在表达式中要有空格,如果写成1+5那么结果就不是我们想要的了. expr命令能够识别一些不同的数学和字符串操作符: 操作符 描述 arg1 | arg2 如果

shell脚本,通过一个shell程序计算n的阶乘。

[[email protected] ~]# cat jiechen.sh #!/bin/bash #设计一个shell程序计算n的阶乘,要求: #1.从命令行接收参数n; #2.在程序开始后立即判断n的合法性,即是否有参数,若有是否为正整数,若非法请给错误提示. #3.最后出计算的结果 num=$1 expr $num + 1 &>/dev/null [ $? -ne 0 ] && echo "please input a number." &&

dx11 入门 Tutorial 04: DX、HLSL中矩阵的内存存储和数学计算方式 DirectXSampleBrowser(June 2010)

主要是两方面: 1.shader数据和dx的通信,使用constant Buffer 2.矩阵的数学计算方式和内存存储方式再DX和HLSL中的异同 先说第一个: dx中的常量数据matrix等传入shader中流程: The first thing that we need to do is declare three constant buffer variables. Constant buffers are used to store data that the application n

理工科应该的知道的C/C++数学计算库(转)

理工科应该的知道的C/C++数学计算库(转) 作为理工科学生,想必有限元分析.数值计算.三维建模.信号处理.性能分析.仿真分析...这些或多或少与我们常用的软件息息相关,假如有一天你只需要这些大型软件系统的某一个很有限的功能,你是不是也要因此再用一用那动辄几个g的软件呢?其实我觉得如果系统不是很大,不是很复杂,我们个人完全有可能自己去编写代码来实现这些‘’有限的功能‘’.别以为这是件很困难的事情,我总以为大学期间学的c语言是极其有用的,只要你会基本的c语言语法,你就可以的. 下面我来介绍几个非常

关于JS数学计算精度不准和自动转科学计数法的问题

在javaScript中,数学计算是一个很坑爹的问题, 由于系统二进制转十进制的误差,导致浮点数的运算精度很不理想,经常会出现一些意想不到的问题. 而js自动将小数转为科学计数法的问题,也让一些自己写数学插件的同学痛苦不已. 第一个,浮点数计算精度: 比如:1.2*3 = 3.599999999.... 解决办法: ⑴将浮点数乘以10的n次幂化为整数,再进行计算,之后再除以10的n次幂,就可以得到我们想要的数值.即:1.2*3 = 12*3/10 = 3.6;(n为小数点后数位之和); 至于多个

[LeetCode] 数学计算模拟类问题:除法和幂,注意越界问题。题 Pow(x, n) ,Divide Two Integers

引言 数学计算的模拟类题目,往往是要求实现某种计算(比如两数相除),实现的过程中会有所限定,比如不允许乘法等等. 这类题目首先要注意计算过程中本身的特殊情况.比如求相除,则必须首先反映过来除数不能为0. 其次要记得考虑负数的情况,如果计算范围不单单是整数,还要考虑double的比较方式. 最后要注意越界情况,这个是最容易犯错的,只能具体问题具体分析. 例题 1 Pow(x, n) Implement pow(x, n). class Solution { public: double pow(d

习题 3 数字和数学计算

每一种编程语言都包含处理数字和进行数学计算的方法.不必担心,程序员经常撒谎说他们是多么牛的数学天才,其实他们根本不是.如果他们真是数学天才,他们早就去从事数学相关的行业了,而不是写写广告程序和社交网络游戏,从人们身上偷赚点小钱而已. 这章练习里有很多的数学运算符号.我们来看一遍它们都叫什么名字.你要一边写一边念出它们的名字来,直到你念烦了为止.名字如下: + plus 加号 - minus 减号 / slash 斜杠 * asterisk 星号 % percent 百分号 < less-than

【JavaScript】数学计算的函数与数字的格式化

JavaScript中使用5中数学计算符号,+,-,*,/,% 常用的函数 Math.ceil 向上取整,Math.ceil(4.2)的返回值为5 Math.floor  向下取整,Math.floor(4.7)的返回值为4 Math.round  四舍五入,Math.round(4.2)的返回值为4,Math.round(4.7)的返回值为5 Math.pow  计算幂值,Math.pow(2,4)返回16 Math.sqrt 开方计算,Math,sqrt(9)返回3 Math.random