shell的算术运算
变量的数值计算方法大致有双括号 (()), expr, bc, $[ ]

例子1

注意:2**3表示2的3次方,a++表示先输出a自身的值,然后进行++的运算; --a表示先进行--的运算,然后再输出a自身的值
例子3:计算连续数之和的公式 n*(n+1)/2

注意:
上面的所有操作只能是用整数,小数是不能成功运算的
例子3:关于双括号中空格的问题

例4,变量运算,(())中直接写变量名
#!/bin/bash
read num1 num2 num3
while [ $num1 -lt $num3 ]
do
echo $num1
num1=$((num1+num2))
done
二. bc命令的用法,可以用于小数
可直接输入bc命令进入交互界面,进行操作;当然也可以在命令行中进行操作,因为bc支持科学计算,所有功能很强大,只要是正确的计算表达式,bc就能处理。
scale可以用来设置保留小数点的位置,scale=3就表示保留三位小数;
obase可以把十进制数转变为其他进制的值。
例子1:
echo 3.5+5 | bc 输出为8.5
echo "obase=2;8" | bc 输出为1000 #表示为10进制的8转换成2进制的值
echo "obase=16;20" | bc #表示十进制20转成16进制的值
echo "scale=3; 5.23/3.13" | bc #保留三位小数值
例子2
seq -s "+" 10 #输出为1+2+3+4+5+6+7+8+9+10
seq -s "+" 10 | bc #输出为55
说明:seq -s "+”10,它表示以“+”为分隔符,来按顺序生成1-10;
有关变量的小数计算还是用awk好,比如
x=3.4
y=4.6
echo $x $y |awk '{print $1+$2}
三. expr (evaluate expressions)
expr 命令一般用于整数值,但也可以用于字符串,用来求表达式的值,同时expr也是一个手工命令行计算器
1. expr基本算数运算
expr $[$a+$b],使用中括号的形式进行运算的方式值得推荐
例如:expr $[2+3] 输出为5
注意:其实这里expr就是一个输出的功能,数值的计算已经由 $[...] 完成,所以等价于echo $[2+3]也可以直接输出计算结果
2. expr 匹配字符用法,expr "..." : "..."
例如,expr "test.txt" : ".*\.txt" 输出为非0
如果结果非0,判断为真,说明字符匹配;如果输出为0,表示不匹配
脚本中可以做一个小优化
expr "text.pub" : ".*\.pub" && echo 1 || echo 0
3. 用expr判断变量是否整数
expr $a + 0 > /dev/null 2>&1
[ $? -eq 0 ] && echo int || echo chars
如果想连续判断,可以把上面语句放在while true 循环中
4. 通过expr计算字符串长度
chars=`seq -s " " 100`
echo ${#chars} 或者 echo $(expr length "$chars") 都可以得到字符串长度
注意:两种把命令执行结果赋值给变量的方式为 `....` 和 $(....)
拓展expr的用法
# seq 1 10,输出是1 2 3 4 5 6 7 8 9 10
默认分隔符是空格,可以用-s 指定分隔符,如下
test3=`seq -s "+" 1 10`;echo $test3 输出为1+2+3+4+5+6+7+8+9+10
expr $[$test3]可计算其值,结果为55
四. read命令及其实践
shell变量除了可以直接赋值或脚本传参外,还可以使用read命令从标准输入中获得
格式为:read [参数] [变量名]
常用参数:
-p:设置提示信息
-t:设置输入超时,默认单位为秒


例子2,有如下脚本,可执行参数值不为整数的情况
#!/bin/bash
while true
do
read -t 10 -p "please input 2 number:" a b
expr $a + 0 > /dev/null 2>&1
[ $? -ne 0 ] && continue #continue表示不执行下面的代码,转而进入下一轮循环
expr $b + 0 > /dev/null 2>&1
[ $? -ne 0 ] && continue||break #break表示立马跳出所有循环
done
shell的算术运算的更多相关文章
- Linux之Shell的算术运算
在Bash的算术运算中有以下几种方法:名称 语法 范例算术扩展 $((算术式)) r ...
- Bash shell 的算术运算有四种方式
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~1:使用 expr 外部程式加法 r=`expr 4 + 5`echo $r注意! '4' '+' '5' 这三者之间要有空白r=`e ...
- shell笔记-算术运算
算术运算在Bash shell环境中,可以利用let.(( ))和[]执行基本的算术操作.而在进行高级操作时,expr和bc这两个工具也会非常有用.let命令可以直接执行基本的算术操作.当使用let时 ...
- Linux shell脚本算术运算和逻辑运算
算术运算 默认不支持算数运算.所以需要特定的语法来完成, shell进行算数运算的工具: let declare (())或$(())或$[] bc let: 格式: let var=算术表达式 例如 ...
- [转]shell基本算术运算
from:http://www.cnblogs.com/yfanqiu/archive/2012/05/10/2494031.html#undefined shell程序中的操作默认都是字符串操作,在 ...
- [shell基础]——算术运算
shell只支持整数运算.一般可用let.expr.declare.$[]实现. 更精准的运算建议使用Linux下的bc工具——一款高精度计算语言. 1. let是shell内建的整数运算命令 ## ...
- shell脚本算术运算
自增自减操作 用let命令可以实现自增自减的命令,不需要$符号: #!/bin/bash set -e n=100 let n++ echo $n 还可以实现自增自减指定的值: #!/bin/bash ...
- shell算术运算与进制运算
(())与let是等效的 arithmetic expression type 与[是等效的 source与.是等效的 其实,Shell(这里是Bash)本身不具备处理浮点计算的能力,但是可以使用“b ...
- LinuxShell算术运算
Bash shell 的算术运算有四种方式:1:使用 expr 外部程式 加法 r=`expr 4 + 5`echo $r注意! '4' '+' '5' 这三者之间要有空白r=`expr 4 * 5` ...
随机推荐
- MFC常用函数总结
1.MFC编辑框.静态文本框相关的常用函数 <1>GetDlgItemText(ID ,str) 作用:从对话框中获取文本 第一个参数为要获取的编辑框(或者静态文本框.单选按钮等可以显示内 ...
- 【LA 3989 训练指南】女士的选择 【稳定婚姻问题】
我们先来学一下稳定婚姻问题 什么是稳定婚姻问题? 有n个女士和n个男士,他们要一一进行配对.每个男士心中对这n个女士都有一个排名,同理,每个女士心里对n个男性也有一个排名.我们要做的是,在他们配对完成 ...
- swift新建类和子类方法的重写与重载
1.首先什么是重写与重载? 一.重写(override) override是重写(覆盖)了一个方法,以实现不同的功能.一般是用于子类在继承父类时,重写(重新实现)父类中的方法. 重写(覆盖)的规则: ...
- 嵌套列表的加权和 · Nested List Weight Sum
[抄题]: Given a nested list of integers, return the sum of all integers in the list weighted by their ...
- [erlang 002]gen_server中何时会跑到terminate函数
一.从start方法产出的独立gen_server进程 实验代码: %%%-------------------------------------- %%% @Module : %%% @Auth ...
- HDFS Hbase
Hbase:Hbase是Hadoop的数据库,是bigtable的实现,基于HDFSHDFS:文件系统,是gfs的实现 Hive,Hbase,HDFS等之间的关系Hive:Hive不支持更改数据的操作 ...
- Linux常见问题及解决方案
问题一: 删除Linux 的烦恼(没出现系统选择菜单只出现"grub": 问题描述: 安装了Linux.WinXP双系统,采用Grub引导系统.在XP下通过格式化磁盘(非法操作)删 ...
- png 深度图像 转为 点云(opencv2)
https://github.com/kruglov-dmitry/pnd2pcd_batch
- Mysql中结果集(mysql_result)与Traversable
对于MySQL应该也不是很陌生吧,我常常爱犯的以错误就是执行mysli_qurey()后就使用数据,忘记返回的是结果集了.而对于lSELECT,.SHOW, DESCRIBE . EXPLAINmys ...
- 3.1.2 condition 条件
package 第三章.重入锁; import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Reent ...