运算符
1 $[]等同于$(()) # $[]表示形式告诉shell求中括号中的表达式的值 2 ~var # 按位取反运算符,把var中所有的二进制为1的变为0,为0的变为1 3 var\<<str # 左移运算符,把var中的二进制位向左移动str位,忽略最左端移出的各位,最右端的各位上补上0值,每做一次按位左移就有var乘2 4 var>>str # 右移运算符,把var中所有的二进制位向右移动str位,忽略最右移出的各位,最左的各位上补0,每次做一次右移就有实现var除以2 5 var&str # 与比较运算符,var和str对应位,对于每个二进制来说,如果二都为1,结果为1.否则为0 6 var^str # 异或运算符,比较var和str对应位,对于二进制来说如果二者互补,结果为1,否则为0 7 var|str # 或运算符,比较var和str的对应位,对于每个二进制来说,如二都该位有一个1或都是1,结果为1,否则为0
运算符优先级
1 级别 运算符 说明 2 =,+=,-=,/=,%=,*=,&=,^=,|=,<<=,>>== # 赋值运算符 3 || # 逻辑或 前面不成功执行 4 && # 逻辑与 前面成功后执行 5 | # 按位或 6 ^ # 按异位与 7 & # 按位与 8 ==,!= # 等于/不等于 9 <=,>=,<,> # 大于或等于/小于或等于/大于/小于 10 \<<,>> # 按位左移/按位右移 (无转意符号) 11 +,- # 加减 12 *,/,% # 乘,除,取余 13 ! ,~ # 逻辑非,按位取反或补码 14 -,+ # 正负 15 }
数学运算
1 $(( )) # 整数运算 2 + - * / ** # 分別为 "加、減、乘、除、密运算" 3 & | ^ ! # 分別为 "AND、OR、XOR、NOT" 运算 4 % # 余数运算 5 6 let{ 7 let # 运算 8 let x=16/4 9 let x=5**5 10 11 }
expr
1 expr 14 % 9 # 整数运算 2 SUM=`expr 2 \* 3` # 乘后结果赋值给变量 3 LOOP=`expr $LOOP + 1` # 增量计数(加循环即可) LOOP=0 4 expr length "bkeep zbb" # 计算字串长度 5 expr substr "bkeep zbb" 4 9 # 抓取字串 6 expr index "bkeep zbb" e # 抓取第一个字符数字串出现的位置 7 expr 30 / 3 / 2 # 运算符号有空格 8 expr bkeep.doc : '.*' # 模式匹配(可以使用expr通过指定冒号选项计算字符串中字符数) 9 expr bkeep.doc : '\(.*\).doc' # 在expr中可以使用字符串匹配操作,这里使用模式抽取.doc文件附属名 10 11 数值测试{ 12 13 #如果试图计算非整数,则会返回错误 14 rr=3.4 15 expr $rr + 1 16 expr: non-numeric argument 17 rr=5 18 expr $rr + 1 19 20 }
bc
1 echo "m^n"|bc # 次方计算 2 seq -s '+' 1000 |bc # 从1加到1000 3 seq 1 1000 |tr "\n" "+"|sed 's/+$/\n/'|bc # 从1加到1000