美文网首页
shell运算详解

shell运算详解

作者: 勇敢的心888 | 来源:发表于2021-08-28 22:50 被阅读0次

    shell中常见的运算命令

    运算操作符与运算命令 意义
    (()) 用于整数运算的常用运算符,效率很高
    let 用于整数运算,类似 (())
    expr 可用于整数运算,单还有其他额外功能
    bc Linux下的一个计算程序,(适合整数及小数运算)
    $[] 用于整数运算
    awk awk既可以用于整数运算,可以用于小数运算
    declare 定义变量值和属性,-i参数可以用于定义整形变量,做运算

    1. (()) 数值运算命令

    1.1 ((i=i+1)) 运算后赋值

    这个中方式只能用于赋值运算,不能输出结果,如果要计算后输出结果需要使用 $((i=i+1))

    # 错误的写法
    [root@ 192.168.1.24 ~]$echo ((i=i+10))
    -bash: syntax error near unexpected token `('
    # 正确的写法
    [root@ 192.168.1.24 ~]$i=10
    [root@ 192.168.1.24 ~]$((i=i+10))
    [root@ 192.168.1.24 ~]$echo $i
    20
    
    [root@ 192.168.1.24 ~]$j=$((i+10))
    [root@ 192.168.1.24 ~]$echo $j
    30
    
    

    综合示例

    [root@ 192.168.1.24 ~]$cat cal.sh
    # 位置参数1
    a=$1
    # 位置参数2
    b=$2
    echo a=$a
    echo b=$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))
    echo $a%7=$((a%7))
    echo $a**$b=$((a**b))
    [root@ 192.168.1.24 ~]$sh cal.sh 10 20
    a=10
    b=20
    10-20=-10
    10+20=30
    10*20=200
    10/20=0
    10%20=10
    10%7=3
    10**20=7766279631452241920
    [root@ 192.168.1.24 ~]$
    
    

    2. (())用于逻辑判断,用于条件判断

    [root@ 192.168.1.24 ~]$((8>7 && 5==5))
    [root@ 192.168.1.24 ~]$echo $?
    0
    [root@ 192.168.1.24 ~]$((8<7 && 5==5))
    [root@ 192.168.1.24 ~]$echo $?
    1
    [root@ 192.168.1.24 ~]$if ((8<7 && 5==5))
    > then
    > echo "条件判断为真"
    > else
    > echo "条件判断为假"
    > fi
    条件判断为假
    [root@ 192.168.1.24 ~]$
    
    

    (())所涉及的数字或变量都必须是整数,不能是小数,或者字符串,bc或awk可以用于小数运算,但一般用到的较少

    3. a++ a-- ++a --a的使用

    [root@ 192.168.1.24 ~]$a=10
    # a++ 表达式执行完毕后再加1 ,即 先执行echo $a 再执行 a+1
    [root@ 192.168.1.24 ~]$echo $((a++))
    10
    [root@ 192.168.1.24 ~]$echo $a
    11
    [root@ 192.168.1.24 ~]$echo $((a--))
    11
    [root@ 192.168.1.24 ~]$echo $a
    10
    # ++a 表达式执行前先加1,即 先执行 a+1 在执行  echo $a
    [root@ 192.168.1.24 ~]$echo $((++a))
    11
    [root@ 192.168.1.24 ~]$echo $a
    11
    [root@ 192.168.1.24 ~]$echo $((--a))
    10
    [root@ 192.168.1.24 ~]$echo $a
    10
    

    (()) 表达式在命令执行时不需要加 $符号,直接使用 ((6%2)) 形式即可,但是如果要输出计算结果,就必须加 $

    (()) 里面的所有字符之间没有空格,有空格不影响结果

    4. let 运算命令的用法

    let i=i+10 等同于 ((i=i+8)) ,但后者效率更高

    [root@ 192.168.1.24 ~]$i=10
    [root@ 192.168.1.24 ~]$let i=i+10
    [root@ 192.168.1.24 ~]$echo $i
    

    5. expr 命令的用法

    # 运算符及用于计算的数字左右都至少有一个空格
    [root@ 192.168.1.24 ~]$expr 2+2
    2+2
    [root@ 192.168.1.24 ~]$expr 2 + 2
    4
    [root@ 192.168.1.24 ~]$expr 2 - 2
    0
    # 注意2:使用乘法时,必须用反斜杠屏蔽其特殊含义
    [root@ 192.168.1.24 ~]$expr 2 * 2
    expr: syntax error
    [root@ 192.168.1.24 ~]$expr 2 \* 2
    4
    [root@ 192.168.1.24 ~]$expr 2 / 2
    1
    
    # 配合变量使用
    [root@ 192.168.1.24 ~]$i=10
    [root@ 192.168.1.24 ~]$i=`expr $i + 10`
    [root@ 192.168.1.24 ~]$echo $i
    20
    

    注意1: 运算符及用于计算的数字左右都至少有一个空格,否则报错

    注意2: 使用乘法时,必须用反斜杠屏蔽其特殊含义

    6. 通过expr判断变量是否为整数

    # expr判断
    # 非整数时
    [root@ 192.168.1.24 ~]$i=10.11
    [root@ 192.168.1.24 ~]$i=`expr $i + 10`
    expr: non-integer argument
    [root@ 192.168.1.24 ~]$echo $?
    2
    # 整数时
    [root@ 192.168.1.24 ~]$i=`expr $i + 10`
    [root@ 192.168.1.24 ~]$echo $?
    0
    
    

    由此可以看出, 可以通过$?的值判断变量是否为整数,如果是整数,$?=0 否则$?=2

    7. bc linxu计算器

    # 通过计算工具输出 1+2+3+4+5+6+7+8+9+10=55
    [root@ 192.168.1.24 ~]$seq -s "+" 10
    1+2+3+4+5+6+7+8+9+10
    [root@ 192.168.1.24 ~]$echo `seq -s "+" 10`=`seq -s "+" 10|bc`
    1+2+3+4+5+6+7+8+9+10=55
    # 通过xargs
    [root@ 192.168.1.24 ~]$echo `seq -s "+" 10`=`seq -s " + " 10|xargs expr`
    1+2+3+4+5+6+7+8+9+10=55
    # 通过$[]
    [root@ 192.168.1.24 ~]$echo $[`seq -s "+" 20`]
    210
    [root@ 192.168.1.24 ~]$echo `seq -s "+" 10`=$(echo $[`seq -s "+" 10`])
    1+2+3+4+5+6+7+8+9+10=55
    

    8. awk 计算

    适合小数和整数

    [root@ 192.168.1.24 ~]$echo "7.7 3.8" |awk '{print ($1-$2)}'
    3.9
    [root@ 192.168.1.24 ~]$echo "7.7 3.8" |awk '{print ($1*$2)}'
    29.26
    [root@ 192.168.1.24 ~]$echo "7.7 3.8" |awk '{print ($1/$2)}'
    2.02632
    [root@ 192.168.1.24 ~]$echo "7.7 3.8" |awk '{print ($1%$2)}'
    0.1
    

    9. declare 命令的用法

    [root@ 192.168.1.24 ~]$declare -i A=10 B=20 C
    [root@ 192.168.1.24 ~]$C=A+B
    [root@ 192.168.1.24 ~]$echo $C
    30
    [root@ 192.168.1.24 ~]$C=A/B
    [root@ 192.168.1.24 ~]$echo $C
    0
    [root@ 192.168.1.24 ~]$C=A-B
    [root@ 192.168.1.24 ~]$echo $C
    -10
    [root@ 192.168.1.24 ~]$C=B/A
    [root@ 192.168.1.24 ~]$echo $C
    2
    [root@ 192.168.1.24 ~]$C=A*B
    [root@ 192.168.1.24 ~]$echo $C
    200
    # 因为已经申明的A B C都是整形,因此可以直接进行运算了 
    

    相关文章

      网友评论

          本文标题:shell运算详解

          本文链接:https://www.haomeiwen.com/subject/yxjiiltx.html