首页 Shell教程shell运算

shell变量

shell条件

运维派隶属马哥教育旗下专业运维社区,是国内成立最早的IT运维技术社区,欢迎关注公众号:yunweipai
领取学习更多免费Linux云计算、Python、Docker、K8s教程关注公众号:马哥linux运维

算术运算

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 ~]#echo $j
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 ~]#echo $i
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 必须要参与运算,,才能得到最终的结果

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

shell变量

shell条件

网友评论comments

发表回复

您的电子邮箱地址不会被公开。

暂无评论

Copyright © 2012-2022 YUNWEIPAI.COM - 运维派 京ICP备16064699号-6
扫二维码
扫二维码
返回顶部