算术运算
shell 支持算术运算,但只支持整数,不支持小数
bash中的算术运算
1
2
3
4
5
6
|
+
-
*
/
%
取模,即取余数,示例: 9 % 4 = 1, 5 % 3 = 2
*
* 乘方 |
乘法符号有些场景中需要转义
实现算术运算:
1
2
3
4
5
6
7
|
(
1 ) let var =算术表达式
(
2 ) ( ( var =算术表达式 ) ) 和上面等价
(
3 ) var = $ [算术表达式 ]
(
4 ) var = $ ( (算术表达式 ) )
(
5 ) var = $ ( expr arg1 arg2 arg3 . . . )
(
6 ) declare – i var = 数值
(
7 ) echo '算术表达式' | bc |
内建的随机数生成器变量:
1
|
$
RANDOM 取值范围: 0 - 32767 |
范例:
1
2
3
4
5
6
|
#生成 0 - 49 之间随机数
echo
$ [ $ RANDOM % 50 ]
#随机字体颜色
[
root @ centos8 ~ ] #echo -e "\033[1;$[RANDOM%7+31]hello\033[0m"
magedu
|
增强型赋值:
1
2
3
4
5
6
7
|
+=
i += 10 相当于 i = i + 10
-=
i -= j 相当于 i = i - j
*
=
/=
%
=
++
i ++ , ++ i 相当于 i = i + 1
--
i -- , -- i 相当于 i = i - 1 |
格式:
1
|
let
varOPERvalue |
范例:
1
2
3
4
5
6
|
[
root @ centos8 ~ ] #let i=10*2
[
root @ centos8 ~ ] #echo $i
20
[
root @ centos8 ~ ] #((j=i+10))
[
root @ centos8 ~ ] #echo $j
30
|
范例:
1
2
3
4
5
6
7
8
9
10
11
|
#自加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
|
范例:
1
2
3
4
5
6
7
8
9
10
|
#自增,自减
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 |
范例:
1
2
3
4
5
6
|
[
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
|
范例:
1
2
|
[
root @ centos8 ~ ] #echo "scale=3;20/3"|bc
6.666
|
范例:
1
2
3
4
5
|
[
root @ centos8 ~ ] #i=10
[
root @ centos8 ~ ] #j=20
[
root @ centos8 ~ ] #declare -i result=i*j
[
root @ centos8 ~ ] #echo $result
200
|
范例:今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
[
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
2
3
4
|
1 或 1 = 1 1 或 0 = 1 0 或 1 = 1 0 或 0 = 0 |
1
|
<
span class = "" > < strong > < span class = "md-plain" >非: < / span > < / strong > < span class = "md-plain" > ! 1 = 0 < / span > < span class = "md-plain" > ! true ! 0 = 1 < span class = "md-plain md-expand" > ! false < / span > < / span > < / span > |
异或:^ 异或的两个值,相同为假,不同为真。两个数字X,Y异或得到结果Z,Z再和任意两者之一X异或,将得出另一个值Y
1
2
3
4
|
1
^ 1 = 0
1
^ 0 = 1
0
^ 1 = 1
0
^ 0 = 0 |
范例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
[
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.3yyy.top/34331.html