zoukankan      html  css  js  c++  java
  • shell 数学运算

    shell运算符如下:

    • +、-、:代表着加号 和减号 或者,负号
    • *、/、%:代表着乘号,除号,和取模。
    • **   : 幂运算
    • ++、-- :表示着增加或者减少,它可以放在前置,也可以放在变量的结尾
    • !、||、&&、(取反)(或) (and)
    • <、<=、>、>=  :比较符号,小于、小于等于、大于、大于等于
    • ==、!=、= :相等,不相等, =表示相等于
    • <<     >>  向左移动 向右移动

    Shell编程之算术运算命令

    •  (()) 用于整数之间常用的运算符,效率高
    • let :用于整数运算,类似于 (()) 
    • expr :用于整数运算,但是还有其他功能
    • bc :Linux下的一个计算程序,适合整数及小数运算
    • $[] :用于整数运算
    • awk:awk既可以整数运算,也可以小数运算
    • declare: 定义变量值和属性,-i参数可以用于定义整型变量,做运算

    1. 双小括号(()) 数值运算命令

    双小括号的作用是进行数值运算与数值的比较,它的效率很高,用法很灵活,是企业运维人员经常采用的操作符
    ((e=e+1)) 它的作用就是把e+1的结果赋值给变量e,可以使用echo $((e=e+1)) 或者 e=$((e=e+1))  把e+1的执行结果赋值给变量e

    数值比较  ((8>7&&5==5)) 用于条件判断

    案例1:双小括号"(())"数值运算实践

    [root@shell-yankerp sh]# echo $((1+1)) #计算1+1后输出 
    2  #那么结果就是等于2
    [root@shell-yankerp sh]# echo $((6-3)) #计算6-3等于多少 
    3  #结果为3
    [root@shell-yankerp sh]# ((a=1+2**3-4%3)) #将=后面的一些计算的结果会赋值给a这个变量
    [root@shell-yankerp sh]# echo $a
    8  #结果为3
    [root@shell-yankerp sh]# b=$((1+2**3-4%3)) #在这里b是一个变量 将变量名的计算结果赋值给b 
    [root@shell-yankerp sh]# echo $b     #输出如下:
    8
    [root@shell-yankerp sh]#
    [root@shell-yankerp sh]# a=8    #首先a变量名 = 变量值 等于8 那么a就是8
    [root@shell-yankerp sh]# echo $((a=a+2)) #原来a=8 那么现在a+2 结果为10
    10
    [root@shell-yankerp sh]# echo $((a+=1))  #当结果为10 这一行代表 a=a+1那么就等于11
    11
    [root@shell-yankerp sh]# echo $((a**2))  #目前a=11 那么a**2 a的二次方 那么等于11x11=121 输出如下: 
    121
    数值比较
    [root@shell-yankerp sh]# echo $((2>1)) #当条件2>1正确后输出了1表示真 
    1
    [root@shell-yankerp sh]# echo $((2>3)) #当条件2>3错误后输出0
    0
    [root@shell-yankerp sh]# echo $((6==6)) #6==6 那么就输出1
    1
    自增自减
    [root@shell-yankerp sh]# a=10
    [root@shell-yankerp sh]# echo $((a++)) 
    10
    [root@shell-yankerp sh]# echo $a
    11
    [root@shell-yankerp sh]#
    [root@shell-yankerp sh]# a=11
    [root@shell-yankerp sh]# echo $((a--)) 
    11
    [root@shell-yankerp sh]# echo $a
    10
    [root@shell-yankerp sh]# echo $((--a)) 
    9
    [root@shell-yankerp sh]# a=9
    [root@shell-yankerp sh]# echo $((++a)) 
    10

    各种(())运算的shell脚本案例

    #!/bin/bash
    a=6
    b=3
    echo "a-b=$((a-b))"
    echo "a+b=$((a+b))"
    echo "a/b=$((a/b))"
    echo "a**b=$((a**b))"

    let运算命令的用法

    [root@shell-yankerp ~]# a=2  
    [root@shell-yankerp ~]# a=a+8  #没有用let 
    [root@shell-yankerp ~]# echo $a
    a+8  #输出结果
    [root@shell-yankerp ~]# unset a #清除变量 
    [root@shell-yankerp ~]# a=2
    [root@shell-yankerp ~]# let a=a+8 使用let
    [root@shell-yankerp ~]# echo $a
    10
    let与(())的对比
    [root@shell-yankerp ~]# a=2
    [root@shell-yankerp ~]# echo $((a=a+8)) 
    10
    [root@shell-yankerp ~]# echo $a
    10

    expr命令用法实例:

    在用expr命令时 左右两侧必须要空格,选择用*号需要拿转义
    利用expr做计算,将一个未知的变量和一个已知的一个整数相加,看返回的值是否为0,如果默认是0 那么就是一个整数。如果非0则输入的就是字符串不是整数。
    [root@shell-yankerp sh]# expr 2 + 2
    4
    [root@shell-yankerp sh]# expr 4 - 2
    2
    [root@shell-yankerp sh]# expr 4 * 2 
    8
    [root@shell-yankerp sh]# expr 4 / 2 
    2
    [root@shell-yankerp sh]#
    expr配合变量实例
    [root@shell-yankerp sh]# a=10
    [root@shell-yankerp sh]# a=`expr $a + 10` 
    [root@shell-yankerp sh]# echo $a
    20
    [root@shell-yankerp sh]#
    判断变量是否为整数
    #!/bin/bash
    expr $1 + 1 &>/dev/null  #这里是一个命令 使用了expr 也使用了特殊的位置变量 
    if [ "$?" -eq 0 ]     #如果以上命令执行结果为0 
     then      #那么
      echo "输入的是整数~"  #输出一条 输入的是整数
     else   #否则
      echo "/bin/sh $# 请输入一个整数"   这里也使用了特殊的位置变量
    fi

    实战:第一关判断参数个数是否为2,若不是请给出提示
              第二关判断参数是否为整数,如果不是那么继续给出提示
              第三关做运算~~~

    #!/bin/bash
    if [ "$#" -ne "2" ]
     then
      echo "/bin/bash $0 请输出两个数值..."
      exit 1
    fi
    #no.2
    a=$1
    b=$2
    expr $1 + 1 &>/dev/null
    if [ "$?" -ne "0" ]
     then
      echo "请输入数值..."
      exit 1
    fi
    #no.3
    echo "a+b=$((a+b))" 
    echo "a-b=$((a-b))"
    echo "a/b=$((a/b))"
    echo "a*b=$((a*b))"
    echo "a**b=$((a**b))"
    echo "a%b=$((a%b))"

    BC命令的用法

    bc是UNIX&Linux下的计算器,因此输了可以做计算器使用,还可以作为命令行计算工具使用,bc可以处理整数和小数,如下:
    1.做计算器使用
    ubuser@ubuser-OptiPlex-7010:~$ bc
    bc 1.07.1
    Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
    This is free software with ABSOLUTELY NO WARRANTY.
    For details type `warranty'.
    1+1
    2
    3*6
    18
    2.5+3.7
    6.2
    使用ctrl+D可以退出
    2.命令行使用
    [root@shell-yankerp ~]# echo 1+2 | bc
    3
    [root@shell-yankerp ~]# echo 1.5+1.5 | bc 
    3.0
    [root@shell-yankerp ~]# echo 2*2 | bc
    4
    [root@shell-yankerp ~]# echo 8.5-8.5 | bc 
    0
    [root@shell-yankerp ~]#
    利用BC配置变量运算
    [root@shell-yankerp ~]# i=5  #设置变量 i=5 
    [root@shell-yankerp ~]# i=`echo $i+5 | bc` 
    [root@shell-yankerp ~]# echo $i 
    10
    [root@shell-yankerp ~]#

    使用awk实现计算

    利用awk进行计算的效果很好,尤其是处理小数,很精确如下:
    ubuser@ubuser-OptiPlex-7010:~$ echo "7.1 3.23"|awk '{print $1-$2}'
    3.87
    ubuser@ubuser-OptiPlex-7010:~$ echo "4 5"|awk '{print ($1+4)*$2}'
    40
    ubuser@ubuser-OptiPlex-7010:~$

    $[]运算

    [root@shell-yankerp ~]# a=5
    [root@shell-yankerp ~]# a=$[a+10]
    [root@shell-yankerp ~]# echo $a
    15
    [root@shell-yankerp ~]# echo $[2*3] 
    6
    [root@shell-yankerp ~]# echo $[2/3] 
    0
    [root@shell-yankerp ~]#

    基于Shell变量输入read命令的运算

    Shell变量除了可以直接赋值或者脚本传参外,还可以使用read命令从标准输入中获取,read命令为bash的内置命令。
    用法如下:
    -p 设置提示信息
    -t 设置输入的等待时间 
    ubuser@ubuser-OptiPlex-7010:~$ read -t10 -p "please input:" o p
    please input:3 4
    ubuser@ubuser-OptiPlex-7010:~$
    ubuser@ubuser-OptiPlex-7010:~$ echo $o $p
    3 4
    #!/bin/bash
    read -t 10 -p "请输入任意两个数值:" a b
    expr $a + 1 &>/dev/null
    if [ "$?" -ne "0" ]
     then
      echo /bin/bash..$0 "请输入两个数字"
      exit 1
    fi
    [ ${#a} -le 0 ] && {
     echo "不能为空!!!"
     exit 1
    }
    [ ${#b} -le 0 ] && {
     echo "不能为空!!!"
     exit 1
    echo "a+b=$((a+b))"
    echo "a-b=$((a-b))"
    echo "a/b=$((a/b))"
    echo "a*b=$((a*b))"
    echo "a**b=$((a**b))"
    read -t 10 -p "请输入任意两个数值:" a b 等待用户输入内容,等待时间为10秒,后面的a b是变量,那么当用户输入了两个数值比如说 1 2 那么1就赋值给了a 2就赋值给了b
    expr $a + 1 &>/dev/null 这个其实前面的文章说过了 使用expr来判断用户输入的是数值还是字符串
    if [ "$?" -ne "0" ]   如果以上命令输入的内容不等于0 也就是输入的不是数值
      then         那么
        echo /bin/bash..$0 "请输入两个数字"    #输出一条请输入数字并打印当前脚本名称
        exit 1                退出脚本
    fi
    [ ${#a} -le 0 ] && {       这里使用了判断,我们已经知道a是一个变量了 如果a长度小于0判断用户是否输入的是空格
      echo "不能为空!!!"   如果输入的是空格那么就输出一条 不能为空
      exit 1    #退出脚本
    }
     
    来自: https://www.jb51.net/article/134292.htm
    https://www.jb51.net/article/134293.htm

  • 相关阅读:
    网站压力测试工具----webbench
    skin.xml
    krpano和react的结合展示
    swiper的相关用法
    js的hover实现方法。
    js的slice和split和splice和substring和substr的区别
    使用JSSDK分享页面
    微信jssdk分享功能开发
    点击复制
    JS的document.all函数使用 示例
  • 原文地址:https://www.cnblogs.com/mianbaoshu/p/14080673.html
Copyright © 2011-2022 走看看