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

余数的使用
1 2 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
|
自增的使用
1 2 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 … 依次类推 |
运算方式
方法一:(())
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
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
|
不支持非整形
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 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
|