[toc]

运算符号

常用运算符号

+:加

-:减

*:乘

/:除

%:取余

++:自增

–:自减

img

余数的使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 使用RANDOM取随机数
echo $RANDOM
27899

# 解析:
随机数的范围是 :man bash 可以查到 0 and 32767 总共32768个数
但是有时候,我想在一个范围内随机,例如,咱们班有100个学生,我想在100内随机抽取一名幸运观众。
那么就需要使用取余的方式来完成了。

# 示例:
echo $((RANDOM%10))
9
echo $((RANDOM%10))
7
echo $((RANDOM%10))
5

自增的使用

1
2
3
4
5
6
7
8
9
10
11
12
# 一般在使用运算的时候,有时候会写 i=i+1 那么我们就可以简写成 i++
# for循环中
for(i=1;i++;i<=10){
这个循环就相当于,第一次循环的时候,i=1
第二次循环的时候,i=i+1 也就是 i=1+1即 i=2
第三次循环的时候,i=i+1 也就是 i=2+1即 i=3
第四次循环的时候,i=i+1 也就是 i=3+1即 i=4
第五次循环的时候,i=i+1 也就是 i=4+1即 i=5
第六次循环的时候,i=i+1 也就是 i=5+1即 i=6
...
一直循环到10,因为i给了一个最大范围是小于等于10
}

逻辑符号

常用逻辑符号

&&:且,前面的命令执行成功后,再执行后面的命令,前面的不成功,则后面的也不执行

||:或,前面的命令执行不成功,才能执行后面的命令,前面的成功,则后面的不执行

!:非,取反

所有符号

符号 作用
+、- 加号,减号,一般用于整型、浮点型等类型的运算,其他语言中也可以做字符串的拼接
*、/、% 乘号、除号、取余,一般用于运算
** 幂运算
++、– 自增、自减,可前置也可后置,默认步长为1
&&、
<、<=、>= 、> 小于、小于等于、大于等于、大于
==、!=、= 等于,可用于数字和字符串、不等于、赋值
<<、>> 向左位移、向右位移
~、 、&、^
+=、-+、=、/=、%=* 赋值运算:a+=1 即 a=a+1 … 依次类推

运算方式

方法一:(())

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 常规运算
echo $((1+1))
2
echo $((2**10))
1024

# 变量运算
n1=111
n2=222
echo $((n1+n2))
333

# 运算赋值
## 方法一
n3=`echo $((n1*n2))`
echo $n3
24642

## 方法二
((n4=n1*n2))
echo $n4
24642

不支持非整形

1
2
3
4
5
6
7
8
9
10
# 只要有小数,咋写都报错
## 示例一
echo $((2.5*4))
-bash: 2.5*4: syntax error: invalid arithmetic operator (error token is ".5*4")

# 示例二
a=2.5
b=4
echo $((a*b))
-bash: 2.5: syntax error: invalid arithmetic operator (error token is ".5")

方法二:let

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 运算示例
## 示例一
let a=1+2
echo $a
3

## 示例二
i=1
let i++
echo $i
2

# 示例三
n=10
let n+=2
echo $n
12

不支持非整形

1
2
3
# 示例
let 2+2.5
-bash: let: 2+2.5: syntax error: invalid arithmetic operator (error token is ".5")

方法三:expr

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# "+"书写格式
## 错误写法
expr 2+2
2+2

## 正确姿势
expr 2 + 2
4

# "*"书写格式
## 错误写法,因为*在bash里是通配符,所以echo一下就知道
expr 2 * 3
expr: syntax error
echo expr 1 * 1
expr 1 zls.txt 1

## 正确姿势,使用"\"让"*"做自己
expr 2 \* 3
6

# expr可以用来判断某一个数字是不是整型
## 如果变量是一个字符串
age=xxx
expr 1 + $age
expr: non-integer argument
echo $?
2

## 如果变量是整型
age=18
expr 1 + $age
19
echo $?
0

不支持非整形

1
2
3
# 示例:
expr 1 + 2.5
expr: non-integer argument

方法四:bc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# "+"运算
## 示例一(整形)
echo 1+2 |bc
3
## 示例二(非整形)
echo 2.5+3 |bc
5.5

# "/"运算
## 示例一
echo 1/3 |bc
0
## 示例二
echo 1/3 |bc -l
.33333333333333333333

# 交互式运算
## bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
## 交互式"+"运算
1+1
2
## 交互式"^"运算,在bc中幂运算只能用"^"不能用"**",跟开发语言有关
2^10
1024

# 进制转换
## 示例一(十六进制转换)
echo 'obase=16;16'|bc
10
echo 'obase=16;15'|bc
F
# 示例二(二进制转换)
echo 'obase=2;15'|bc
1111
echo 'obase=2;18'|bc
10010

方法五:$[忘记他]

方法六:awk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 示例一(多运算)
awk 'BEGIN{print 1+2,2**10}'
3 1024

# 示例二(非整形运算)
awk 'BEGIN{print 1+2,2**10,2.5*3,1/3}'
3 1024 7.5 0.333333

# 变量运算
## 错误写法
x=1
y=2
awk 'BEGIN{print x/y}'
awk: cmd. line:1: fatal: division by zero attempted

## 正确姿势
awk -v x=1 -v y=2 'BEGIN{print x/y}'
0.5
## 引用命令行的变量
awk -v x=$a -v y=$b 'BEGIN{print x/y}'
2