shell运算

算术运算

shell 支持算术运算,但只支持整数,不支持小数

bash中的算术运算

+
-
*
/
%   取模,即取余数,示例:9%4=1,5%3=2
**  乘方

乘法符号有些场景中需要转义

实现算术运算:

(1) let var=算术表达式
(2) ((var=算术表达式)) 和上面等价
(3) var=[算术表达式]
(4) var=((算术表达式))
(5) var=$(expr arg1 arg2 arg3 ...)
(6) declare –i var = 数值
(7) echo '算术表达式' | bc

内建的随机数生成器变量:

$RANDOM    取值范围:0-32767

范例:

#生成 0 - 49 之间随机数
echo [RANDOM%50]

#随机字体颜色
[root@centos8 ~]#echo -e "/033[1;$[RANDOM%7+31]hello/033[0m"
magedu

shell运算插图

增强型赋值:

+=  i+=10  相当于 i=i+10
-=  i-=j   相当于 i=i-j
*=
/=
%=
++  i++,++i    相当于 i=i+1
--  i--,--i    相当于 i=i-1

格式:

let varOPERvalue

范例:

[root@centos8 ~]#let i=10*2
[root@centos8 ~]#echo i
20
[root@centos8 ~]#((j=i+10))
[root@centos8 ~]#echoj
30

范例:

#自加3后自赋值
let count+=3

[root@centos8 ~]#i=10
[root@centos8 ~]#let i+=20  #相当于let i=i+20
[root@centos8 ~]#echo i
30
[root@centos8 ~]#j=20
[root@centos8 ~]#let i*=j 
[root@centos8 ~]#echoi
600

范例:

#自增,自减
let var+=1
let var++
let var-=1
let var--

[root@centos8 ~]#unset i j ; i=1; let j=i++; echo "i=i,j=j"
i=2,j=1
[root@centos8 ~]#unset i j ; i=1; let j=++i; echo "i=i,j=j"
i=2,j=2

范例:

[root@centos8 ~]#expr 2 * 3
expr: syntax error: unexpected argument ‘anaconda-ks.cfg’
[root@centos8 ~]#ls
anaconda-ks.cfg
[root@centos8 ~]#expr 2 /* 3
6

范例:

[root@centos8 ~]#echo "scale=3;20/3"|bc
6.666

范例:

[root@centos8 ~]#i=10
[root@centos8 ~]#j=20
[root@centos8 ~]#declare -i result=i*j
[root@centos8 ~]#echo $result
200

范例:今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?

[root@centos8 scripts]#cat chook_rabbit.sh 
#!/bin/bash
#
#********************************************************************
#Author:        wangxiaochun
#QQ:            29308620
#Date:          2020-04-01
#FileName:      chook_rabbit.sh
#URL:           http://www.magedu.com
#Description:       The test script
#Copyright (C):     2020 All rights reserved
#********************************************************************
HEAD=1
FOOT=2

RABBIT=(((FOOT-HEAD-HEAD)/2))
CHOOK=[HEAD-RABBIT]
echo RABBIT:RABBIT
echo CHOOK:CHOOK
[root@centos8 scripts]#./chook_rabbit.sh 30 80
RABBIT:10
CHOOK:20
[root@centos8 scripts]#

2.10 逻辑运算

true, false 1, 0

与:&:和0相与,结果为0,和1相与,结果保留原值 1 与 1 = 1 1 与 0 = 0 0 与 1 = 0 0 与 0 = 0

或:|:和1相或结果为1,和0相或,结果保留原值

 1 或 1 = 1
    1 或 0 = 1
    0 或 1 = 1
    0 或 0 = 0
非:! 1 = 0 ! true! 0 = 1 ! false

异或:^ 异或的两个值,相同为假,不同为真。两个数字X,Y异或得到结果Z,Z再和任意两者之一X异或,将得出另一个值Y

1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0

范例:

[root@centos8 ~]#true 
[root@centos8 ~]#echo ?
0
[root@centos8 ~]#false
[root@centos8 ~]#echo?
1
[root@centos8 ~]#! true
[root@centos8 ~]#echo ?
1
[root@centos8 ~]#! false
[root@centos8 ~]#echo?
0
[root@centos8 ~]#x=10;y=20;temp=x;x=y;y=temp;echo x=x,y=y
x=20,y=10
[root@centos8 ~]#x=10;y=20;x=[x^y];y=[x^y];x=[x^y];echo x=x,y=y
x=20,y=10

短路运算

  • 短路与

CMD1 短路与 CMD2

第一个CMD1结果为真 (1),第二个CMD2必须要参与运算,才能得到最终的结果

第一个CMD1结果为假 (0),总的结果必定为0,因此不需要执行CMD2

  • 短路或

CMD1 短路或 CMD2

第一个CMD1结果为真 (1),总的结果必定为1,因此不需要执行CMD2 第一个CMD1结果为假 (0),第二个CMD2 必须要参与运算,,才能得到最终的结果

本文链接:http://www.yunweipai.com/34331.html

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/52547.html

(0)
上一篇 2021年8月6日
下一篇 2021年8月6日

相关推荐

发表回复

登录后才能评论