• shell脚本中用到的计算


      在shell脚本中计算一般会涉及到let、$(())、$[]、bc(另扩展expr)。其中let、$(())、$[]都是用来做基本整数运算,bc可以用来做浮点运算

    (1).let、$(())、$[]

      因为这三个基本等价,所以放在一起说明。

      首先来看下let命令

    [xf@xuexi ~]$ num=10
    [xf@xuexi ~]$ echo $num
    10
    [xf@xuexi ~]$ let num=$num+6;echo $num
    16
    [xf@xuexi ~]$ let num=num-6;echo $num  //let命令中等号右边可以没有美元符号
    10
    [xf@xuexi ~]$ let num+=6;echo $num  //+=、-=、*=、/=分别是自加、自减、自乘、自除
    16
    [xf@xuexi ~]$ let num-=6;echo $num
    10
    

      再看$(())

    [xf@xuexi ~]$ num=10
    [xf@xuexi ~]$ echo $num
    10
    [xf@xuexi ~]$ num=$((num+6));echo $num  //也可以num=$((num+=6))
    16
    [xf@xuexi ~]$ num=$((num-6));echo $num
    10
    

      最后看$[]

    [xf@xuexi ~]$ num=10
    [xf@xuexi ~]$ echo $num
    10
    [xf@xuexi ~]$ num=$[num+6];echo $num
    16
    [xf@xuexi ~]$ num=$[num-6];echo $num
    10

      注意:$(())和$[]可以直接使用在命令中,而let则不行

    [xf@xuexi ~]$ num=10
    [xf@xuexi ~]$ echo $((num+6))
    16
    [xf@xuexi ~]$ echo $[num+6]
    16

    (2).bc

      bc命令是用来做浮点运算,也就是小数点运算。

    [xf@xuexi ~]$ bc
    bc 1.06.95
    Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
    This is free software with ABSOLUTELY NO WARRANTY.
    For details type `warranty'.   //以上抬头可以使用-q命令省略
    num =10  //bc命令里可以另外定义变量
    num*5
    50
    
    5/3
    1  //这里之所以为整数,是因为没有设置小数位数
    scale=2  //设置小数的位数为2位
    5/3
    1.66
    
    quit  //退出
    

      上面都是在命令行中使用,如果想要使用到脚本当中需要借助echo命令来使用,如下:

    [xf@xuexi ~]$ vim a.sh
    [xf@xuexi ~]$ cat a.sh 
    #!/bin/bash
    num=10
    echo "scale=2;$num/3" | bc
    [xf@xuexi ~]$ sh a.sh
    3.33

    (3).扩展expr

      expr可以对数字进行基本运算,也可以做比较,还可以对字符串进行操作。

      首先使用expr进行基本运算,注意乘号(*)需要转义,数字与符号之间必须使用空格隔开

    [xf@xuexi ~]$ expr 5 + 2
    7
    [xf@xuexi ~]$ expr 5 - 2
    3
    [xf@xuexi ~]$ expr 5 * 2
    expr: 语法错误
    [xf@xuexi ~]$ expr 5 * 2
    10
    [xf@xuexi ~]$ expr 5 / 2
    2
    //下面是错误的格式
    [xf@xuexi ~]$ expr 5+1
    5+1
    [xf@xuexi ~]$ expr 5 * 1
    expr: 语法错误
    

      接着进行数字的比较,注意输出0表示假(错误),输出1表示真(正确),大小于号需要转义,数字与符号之间一样需要用空格隔开

    [xf@xuexi ~]$ expr 5 >  1
    1
    [xf@xuexi ~]$ expr 5 <  1
    0
    [xf@xuexi ~]$ expr 5 = 1
    0
    [xf@xuexi ~]$ expr 5 != 1
    1
    //下面是错误的格式
    [xf@xuexi ~]$ expr 5 > 1
    [xf@xuexi ~]$ expr 5>1
    5>1
    

      最后看对字符串的处理,可以使用"length [字符串]"来统计字符串长度;也可以使用"substr [偏移量] [长度]"截取指定的字符,偏移量从1开始;

    [xf@xuexi ~]$ expr length "hello world"
    11
    [xf@xuexi ~]$ expr substr "hello world" 2 3  //2表示从第2位开始,3表示截取3位字符
    ell
    

      

  • 相关阅读:
    leetcode 之 Palindrome Partitioning
    虚拟机共享文件夹下tar
    leetcode 之 Excel Sheet Column Number
    AndroidHttpClient & jsoup 解析 正方教务系统
    查看android下的分区表
    ubuntukylin 下编译 android4.4
    android:layout_weight 和 android: weightSum的使用
    Intent 与Bundle的传值关系
    使用自定义的Toast
    SlideMenu例子解析2
  • 原文地址:https://www.cnblogs.com/diantong/p/10808091.html
Copyright © 2020-2023  润新知