• Shell之变量的数值计算与输入


    一、变量数值计算的命令

    变量的数值计算主要有以下几个命令或者符号:

    • (())
    • let
    • expr
    • bc
    • $[]

    二、(())

    (一)运算符表

    运算符 说明
    ++ -- 增加 减少,可前置也可后置
    + -  !~ 一元正号 负号 逻辑与位的取反
    + - * / % 加法、减法、乘法、除法、取余
    < <= > >= 比较符号
    == != 相等与不相等
    <<   >> 向左位移 向右位移
    & 位的AND
    ^ 位的异或
    | 位的或
    && 逻辑AND
    || 逻辑OR
    ?: 条件表达式

    = +=  -=  *=   /=  %=

    &=  ^=  <<=  >>=  |=

    赋值运算符 x+=1,相当于x = x+1

    上述的运算符常常置于$((...))语法中,如下的实例说明。

    [root@localhost ~]# ((a=1+2+3))
    [root@localhost ~]# echo $a
    6
    
    [root@localhost ~]# b=$((3**3))
    [root@localhost ~]# echo $b
    27
    
    [root@localhost ~]# echo $((5%2))
    1

    上述三种不同的写法,值得注意的是(())涉及的变量均是整型的计算,不可用于浮点型和字符型。

    (二)实例

    1、++ --变量前后

    [root@localhost ~]# x=1
    [root@localhost ~]# echo $((x++))
    1
    [root@localhost ~]# echo $x
    2
    
    [root@localhost ~]# x=1
    [root@localhost ~]# echo $((++x))
    2
    [root@localhost ~]# echo $x
    2

    变量在前,先输出变量的值;变量在后,先运算后再输出变量的值。

    2、各种运算符计算

    [root@localhost ~]# echo $((100%10))
    0
    [root@localhost ~]# echo $((100**10))
    7766279631452241920
    [root@localhost ~]# echo $((100/10))
    10
    ...

    3、计算器

    实现通过传参的形式进行加、减、乘、除的计算器功能。

    #!/bin/sh
    echo "$(($1$2$3))"

    通过sh test.sh 1+2进行计算。这是通过传入三个参数,另外也可以将三个参数当成一个:

    #!/bin/sh
    echo "$(($1))"

    二、let命令 

    let命令是进行赋值表达式:let 赋值表达式

    # 使用let
    [root@localhost project]# a=1
    [root@localhost project]# let a=a+2
    [root@localhost project]# echo $a
    3
    
    #不使用let
    [root@localhost project]# a=a+2
    [root@localhost project]# echo $a
    a+2

    let a=a+2等同于((a=a+2)),但后者效率更高。

    三、expr

    expr命令可用于整型和字符串,用来求表达式的值,同时expr是一个手工命令行计算器。

    1、运算

    [root@localhost project]# expr 2 + 1
    3
    [root@localhost project]# expr 2 - 1
    1
    
    # 使用进行转义
    [root@localhost project]# expr 2 * 1
    2
    [root@localhost project]# expr 2 / 1
    2
    • 运算符左右都有空格,并且左右两侧的空格数量一致
    • 乘除等运算符号需要使用来进行转义

    2、循环计数

    [root@localhost project]# i=0
    [root@localhost project]# i=`expr $i + 1`
    [root@localhost project]# echo $i
    1

    四、bc

    bc是unix下的计算器,可用在命令行下面:

    [root@localhost project]# 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'. 
    1+1
    2

    它不仅可用于整型的计算,还可用于浮点型的计算:

    [root@localhost project]# echo 1+1|bc
    2
    [root@localhost project]# echo 1+1.5|bc
    2.5
    [root@localhost project]# echo 1*1.5|bc
    1.5

    使用bc完成1-20的整数相加:

    #法一
    [root@localhost project]# echo "`seq -s + 20`="`seq -s + 20|bc`
    1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20=210
    
    #法二
    [root@localhost project]# echo "`seq -s + 20`="$((`seq -s + 20`))
    1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20=210

    五、$[]

    [root@localhost project]# echo $[2+2]
    4
    [root@localhost project]# echo $[ 2+2 ]
    4
    [root@localhost project]# echo $[ 2*2 ]
    4

    它可以用来代替expr,并且不需要运算符两侧的空格。

    六、变量输入

     shell变量除了可以直接赋值和脚本传参外,还可以使用read命令从标准输入获取数值。

    语法格式:read 参数 变量名

    参数:

    • -p(prompt)设置提示信息
    • -t(timeout)设置等待时间,单位秒
    # 变量x前有空格
    [root@localhost project]# read -p "please input:" x y
    please input:1 2
    [root@localhost project]# echo $x $y
    1 2

    read可以代替用户传参:

    #!/bin/sh
    read -t 20 -p "please input three param:" a b c
    echo "$(($a$b$c))"

    上面脚本执行后:

    [root@localhost project]# sh test.sh 
    please input three param:1 + 2
    3

    另外read -p功能可以使用echo和read替代:

    [root@localhost project]# echo -n "please input:"
    please input:[root@localhost project]# read x y
    作者:iveBoy
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    对文件的操作
    三级菜单优化
    三级菜单项目
    对字符串的操作(一些重要的方法)
    四、saltstack如何管理对象?
    三、saltstack证书管理
    二、saltstack基础配置
    一、saltstack简介和安装
    set集合
    异常处理语法
  • 原文地址:https://www.cnblogs.com/shenjianping/p/14288329.html
Copyright © 2020-2023  润新知