[toc]
运算符号
常用运算符号
+:加
-:减
*:乘
/:除
%:取余
++:自增
–:自减

余数的使用
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 
 | echo $RANDOM
 27899
 
 
 随机数的范围是 :man bash 可以查到 0 and 32767 总共32768个数
 但是有时候,我想在一个范围内随机,例如,咱们班有100个学生,我想在100内随机抽取一名幸运观众。
 那么就需要使用取余的方式来完成了。
 
 
 echo $((RANDOM%10))
 9
 echo $((RANDOM%10))
 7
 echo $((RANDOM%10))
 5
 
 | 
自增的使用
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 
 | 
 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 … 依次类推 | 
运算方式
方法一:(())
| 12
 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
 
 | 
不支持非整形
| 12
 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
| 12
 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
 
 | 
不支持非整形
| 12
 3
 
 | let 2+2.5
 -bash: let: 2+2.5: syntax error: invalid arithmetic operator (error token is ".5")
 
 | 
方法三:expr
| 12
 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
 
 
 
 expr 2 * 3
 expr: syntax error
 echo expr 1 * 1
 expr 1 zls.txt 1
 
 
 expr 2 \* 3
 6
 
 
 
 age=xxx
 expr 1 + $age
 expr: non-integer argument
 echo $?
 2
 
 
 age=18
 expr 1 + $age
 19
 echo $?
 0
 
 | 
不支持非整形
| 12
 3
 
 | expr 1 + 2.5
 expr: non-integer argument
 
 | 
方法四:bc
| 12
 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 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
| 12
 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
 
 |