[9-13]Shell系列6――取算数运算数值
2015-09-22 13:38
756 查看
本文旨在总结shell编程中取算术运算数值的常用6种方法:let、(())、$[]、expr、bc以及awk
知识储备:
Bash原生是不支持算术运算的,默认会当作字符串来处理,如下例
对于一些需要算术运算结果的片段,如何取得算术运算结果大致有以下6种方法,分别简单介绍
用法Let
注意点:
<1>几乎支持所有运算,如++、--、括号优先级等,求幂次方用**
<2>变量引用可以不带$号,如变量num1=num1+1
<3>一般情况下算术表达式可以不加引号,若表达式中有bash关键字需加上
<4>let后面的表达式只支持整数运算
代码实现:
用法(())
注意点: <1>用法、支持的运算基本同let,效果基本等价 <2>变量引用可以不带$,建议带上代码实现:
用法$[]
注意点: <1>使用比较广泛,意思是将中括号内的表达式作为数学运算先计算结果再输出 <2>$[]中变量引用可不带$,但是建议带上 <3>运算支持同let,但是只支持整数运算代码实现:
用法expr
注意点: <1>一款表达式计算工具,能够完成表达式的求值操作,它本身是一个命令,可以直接使用 <2>支持逻辑运算| & ,支持关系运算< <= = != ,支持算术运算+ - * / % <3>乘法必须使用转义 \*,否则会连接字符串
<4>表达式和运算符之间要有空格!正确格式 ARG1 - ARG2 <5>默认只能保留整数位,不支持浮点数运算代码实现:
用法bc
注意点: <1>bc其实也是一个命令,是一个计算器程序,有些Linux未必自带 <2>bc可以实现几乎所有运算,但是需要进入bc交互接口,所以在shell中使用管道来处理 <3>支持浮点数运算,但是需要通过sacle指定精度代码实现:
用法awk
注意点: <1>awk本质是一款文本处理、格式化报表输出工具,同时也可以作为一门编程语言 <2>虽然bash原生不支持运算,但是awk支持众多运算,还能进行浮点运算代码实现:
本文出自 “蓝色仓库” 博客,请务必保留此出处http://bluebox.blog.51cto.com/8852456/1697060
知识储备:
Bash原生是不支持算术运算的,默认会当作字符串来处理,如下例
1 2 3 4 5 | #!/bin/bash a=15+20 echo $a #运行结果----> [root@centos~]#15+20 |
用法Let
注意点:
<1>几乎支持所有运算,如++、--、括号优先级等,求幂次方用**
<2>变量引用可以不带$号,如变量num1=num1+1
<3>一般情况下算术表达式可以不加引号,若表达式中有bash关键字需加上
<4>let后面的表达式只支持整数运算
代码实现:
1 2 3 4 5 6 7 | #!/bin/bash read -p "Enter 2 Num: " a b let "sum=a+b" let "mi=$a**$b" echo "sum = $sum" echo "mi = $mi" |
用法(())
注意点: <1>用法、支持的运算基本同let,效果基本等价 <2>变量引用可以不带$,建议带上代码实现:
1 2 3 4 5 | #!/bin/bash read -p "Enter a number: " a ((a++)) echo $a |
用法$[]
注意点: <1>使用比较广泛,意思是将中括号内的表达式作为数学运算先计算结果再输出 <2>$[]中变量引用可不带$,但是建议带上 <3>运算支持同let,但是只支持整数运算代码实现:
1 2 3 4 5 6 7 8 | #!/bin/bash if [ $# -eq 0 ];then echo "Please pass a parameter before EXEC!" exit 1 else echo "$1*10 = $[$1*10]" fi |
用法expr
注意点: <1>一款表达式计算工具,能够完成表达式的求值操作,它本身是一个命令,可以直接使用 <2>支持逻辑运算| & ,支持关系运算< <= = != ,支持算术运算+ - * / % <3>乘法必须使用转义 \*,否则会连接字符串
<4>表达式和运算符之间要有空格!正确格式 ARG1 - ARG2 <5>默认只能保留整数位,不支持浮点数运算代码实现:
1 2 3 4 | #!/bin/bash read -p "Enter 2 Num: " a b echo `expr $a \* $b` |
用法bc
注意点: <1>bc其实也是一个命令,是一个计算器程序,有些Linux未必自带 <2>bc可以实现几乎所有运算,但是需要进入bc交互接口,所以在shell中使用管道来处理 <3>支持浮点数运算,但是需要通过sacle指定精度代码实现:
1 2 3 4 5 | #!/bin/bash var=3.14 var=`echo "scale=2;$var*3"|bc` echo $var |
用法awk
注意点: <1>awk本质是一款文本处理、格式化报表输出工具,同时也可以作为一门编程语言 <2>虽然bash原生不支持运算,但是awk支持众多运算,还能进行浮点运算代码实现:
1 2 3 4 5 | #!/bin/bash var=2.71 var=`echo "$var 2"|awk '{printf("%g",sin($1/$2))}'` echo $var |
本文出自 “蓝色仓库” 博客,请务必保留此出处http://bluebox.blog.51cto.com/8852456/1697060
相关文章推荐
- linux下shell编程基础
- shell 冒泡排序 数组的使用
- Linux Shell脚本实现根据进程名杀死进程
- /bin/bash^M: bad interpreter: 没有那个文件或目录
- linux shell 管道命令(pipe)使用及与shell重定向区别
- Firefox OS启动过程分析-Shell入口
- Linux Shell 命令 简介
- Shell编程
- 9-13 shell工作原理和编程中知识点总结
- Shell 工作原理
- Linux Shell 文本处理工具集锦
- 2015年9月13日和15日【shell、sed&awk 的使用(一)】-JY1506402-19+liuhui880818
- bash编程之:函数与数组
- ShellExecute
- Linuxshell脚本之if条件判断
- [9-13]Shell系列5――条件测试和运算符
- 使用shell统计字符串出现的次数,并从大到小进行排序显示
- Linux下QT中执行shell命令
- 单行bash、shell、perl命令
- BASH_SUBSHELL 变量不生效的情况