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

例子1

注意:2**3表示2的3次方,a++表示先输出a自身的值,然后进行++的运算; --a表示先进行--的运算,然后再输出a自身的值

这例子的意思就是说啊
1. 双括号里可以直接运算并且赋值给变量,简单的运算就用 ((a=1+2**4-4%2))吧,方便啊
2. 也可以是双括号里运算完后,按照平常的方式赋值给变量,就是例子中的b=$((....)),运算复杂了用这一种,比如括号里有变量的时候。
3. 都不用赋值给变量,直接出运算结果。这种方法有时候会有奇效,比如下面的实现加减乘除计算器
 
 
例子2:比较大小,真的布尔值为1,假的布尔值为0

例子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的算术运算的更多相关文章

  1. Linux之Shell的算术运算

    在Bash的算术运算中有以下几种方法:名称                语法                    范例算术扩展            $((算术式))              r ...

  2. Bash shell 的算术运算有四种方式

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~1:使用 expr 外部程式加法 r=`expr 4 + 5`echo $r注意! '4' '+' '5' 这三者之间要有空白r=`e ...

  3. shell笔记-算术运算

    算术运算在Bash shell环境中,可以利用let.(( ))和[]执行基本的算术操作.而在进行高级操作时,expr和bc这两个工具也会非常有用.let命令可以直接执行基本的算术操作.当使用let时 ...

  4. Linux shell脚本算术运算和逻辑运算

    算术运算 默认不支持算数运算.所以需要特定的语法来完成, shell进行算数运算的工具: let declare (())或$(())或$[] bc let: 格式: let var=算术表达式 例如 ...

  5. [转]shell基本算术运算

    from:http://www.cnblogs.com/yfanqiu/archive/2012/05/10/2494031.html#undefined shell程序中的操作默认都是字符串操作,在 ...

  6. [shell基础]——算术运算

    shell只支持整数运算.一般可用let.expr.declare.$[]实现. 更精准的运算建议使用Linux下的bc工具——一款高精度计算语言. 1. let是shell内建的整数运算命令 ## ...

  7. shell脚本算术运算

    自增自减操作 用let命令可以实现自增自减的命令,不需要$符号: #!/bin/bash set -e n=100 let n++ echo $n 还可以实现自增自减指定的值: #!/bin/bash ...

  8. shell算术运算与进制运算

    (())与let是等效的 arithmetic expression type 与[是等效的 source与.是等效的 其实,Shell(这里是Bash)本身不具备处理浮点计算的能力,但是可以使用“b ...

  9. LinuxShell算术运算

    Bash shell 的算术运算有四种方式:1:使用 expr 外部程式 加法 r=`expr 4 + 5`echo $r注意! '4' '+' '5' 这三者之间要有空白r=`expr 4 * 5` ...

随机推荐

  1. go_常量与枚举

    package main import ( "fmt" "math" ) //常量的数值可以作为各种类型使用 func consts(){ const file ...

  2. TEXTBOX属性TEXTMODE设置为PASSWORD后,后台不能给这个TEXTBOX赋值原因

    TEXTBOX属性TEXTMODE设置为PASSWORD后,后台不能给这个TEXTBOX赋值原因? 在开发中,会在用户管理等修改页面中设置密码的显示.但是直接给TextBox的Text属性赋值在前台无 ...

  3. MonoBehaviour.print和Debug.Log是同样的作用

    MonoBehaviour.print("identical------------------------");

  4. 虚拟机安装centos发现inet为127.0.0.1,导致Xshell连接不上

    问题如标题所示: 设置网卡开机自动启动: 实质linux是看一个网卡文件的配置,就是/etc/sysconfig/network-scripts/ifcfg-eth0 (这个文件名看你网卡名称而异,具 ...

  5. springboot用于web开发

    1.使用SpringBoot:1)创建SpringBoot应用,选中我们需要的模块:2)SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来3)自己编写业务代码 ...

  6. Linux常见问题及解决方案

    问题一: 删除Linux 的烦恼(没出现系统选择菜单只出现"grub": 问题描述: 安装了Linux.WinXP双系统,采用Grub引导系统.在XP下通过格式化磁盘(非法操作)删 ...

  7. web.xml配置详解[转]

    引文: 对于一个J2EE领域的程序员而言,基本上每天都会和web应用打交道. 什么是web应用?最简单的web应用什么样?给你一个web应用你该从何入手? 1.什么是web应用? web应用是一种可以 ...

  8. Linux静态库与动态库详解

    引言 为了代码的复用性和模块化,我们常常使用一些库文件,在Windows操作系统下位.lib .dll作为静态库和动态库的后缀名. 在Linux下,静态链接库名字一般为libabcdef.a,其中ab ...

  9. [SoapUI] 在某个测试步骤下面增加Script Assertion,运用 messageExchange 获取response content

    import com.eviware.soapui.support.GroovyUtils import com.eviware.soapui.support.XmlHolder import org ...

  10. vi/vim 消除搜索后的关键字高亮

    使用vi或vim命令搜索某个关键字之后,取消高亮显示的方法 只要输入:noh即可