shell中的运算符(基本与C相同):
++、–、+、-、、/(除/取整)、*(幂运算)、><=、>=、==、!=、+(正)、-(负)、%(取余)、!(逻辑非)、~(位非)、^(异或)、|(位或)、&(位与)、>>(右移)、<<(左移)、&&(逻辑与)、||(逻辑或)、?:(条件表达式)、
=、+=、-=、/=、*=、%=、&=、|=、^=、>>=、<<=、
常见的数值计算:
1、(())的用法:
“(())”的操作数只能是整数,不能使是小数/字符串等:
很常用且效率高,用于执行简单的整数运算。只需要用”$((“与”))”括起来。
eg:
echo $((3>2)) #1
echo $((3<2)) #0
((a=2**3))
echo $a #8
echo $(a>>1) #4
echo $((a++)) #4
echo $((++a)) #6
2、let命令的用法:
格式:let 赋值表达式,与”(())”差不多,但是效率不高
eg:
#!/bin/bash
i = $1
let i *= i
echo $i #结果100
3、expr的用法:
expr命令一般用于整数值,但是也可以用于字符串,用来求表达式的值,同时expr也是一个手工命令行计算器。(用于命令行计算时,要在运算符左边和边加空格)
expr 2+2 #2+2
expr 2 + 2 #4
expr 4 * 2 #语法错误
expr 4 \* 2 #8,需要将乘号转义,以屏蔽特殊用法
a=10
a=`expr $a + 10`
echo $a #20
expr $[a+5] #25
expr的其他用法:
#判断文件的后缀名是否与条件相符,不相符合返回0,符合则返回文件名长度(字符个数):
expr "$1" : ".*\.pub"
expr "test.pub" : ".*\.pub" && echo "匹配" || echo "不匹配"
#判断一个变量是否是整数:
read -p "Please input:"a
expr $a + 0 &> /dev/null //(注意"$a + 0"必须有空格)
[ $? -eq 0] && echo "int" || echo "string"
#-eq 0:等于0则返回真;-ne 0:不等于0则返回真
4、bc的用法:
UNIX下的计算器,既可用在命令行中,也可以用在脚本文件里面。不仅可以用于整数,也可以用于小数
a=2
echo $a+2 | bc #4
echo 7.1+2.2 | bc #9.3
echo "`seq -s "+" 10` = `seq -s "+" 10` | bc" #1+2+3+4+5+6+7+8+9+10 = 55
(bc进入计算器,quit退出计算器,而在脚本中一般就是用echo将算式拼出来并通过管道交给bc)只要是正确的数学表达式,就可以通过管道符交给bc计算。
#scale=n 设置保留n位小数
#obase=n 设置十进制转换为n进制
echo "scale=2;5/2"|bc #2.50(生产环境基本不用,因为取整取余用不着带小数点)
echo "obase=2;8"|bc #1000
5、typeset的用法:
typeset -i A=10 B=20 #定义两个变量A和B
A=A+B
echo $A #30
6、$[]的用法:
a=5
expr $[a=a+5] #10
echo $[a=a+5] #15