expr命令
运算符合计算机其他语言有部分不懂。在shell运行中有些特殊符号需要转义、只支持正整数
特殊运算操作符 * , |,&,> ,>=,<,<= 这几个都需要转义 * , | , \>
num1 > num2 为真的话返回1否则返回0
[root@docker-host sh]# num1=30
[root@docker-host sh]# num2=50
[root@docker-host sh]# expr $num1 \> $num2
0
[root@docker-host sh]# num1=100
[root@docker-host sh]# expr $num1 \> $num2
1
[root@docker-host sh]#
num1 | num2 num1不为空且非0 ,返回num1;否做返回num2;
num1 & num2 num1不为空且非0,返回num1; 否则返回0
比较$(())运算
[root@docker-host sh]# $(($num1+$num2))
-bash: 150: command not found
[root@docker-host sh]# echo $(($num1+$num2))
150
[root@docker-host sh]# num3=$(($num1+$num2))
[root@docker-host sh]# echo $num3
150
$(())的运算结果需要进行赋值操作才能直接输出,
$(()) 不能用于等于
[root@docker-host sh]# echo $(($num1=$num2))
-bash: 100=50: attempted assignment to non-variable (error token is "=50")
[root@docker-host sh]# expr $num1 = $num2
0
用expr和$?变量来检测是否为整数,进行数学运算
#!/usr/bin/env bash
#$?获取上次执行结果
#shell中for循环遍历的时候 为 (()) 两个括号的形式
while true
do
read -p "pls input a positive number:" num
expr $num + 1 &> /dev/null
if [ $? -eq 0 ];then
if [ ` expr $num \> 0 ` -eq 1 ];then
for((i=1;i<=$num;i++))
do
sum=`expr $sum + $i`
done
echo "1+2+3+....+$num = $sum"
exit
fi
else
echo "error,input "
fi
done
浮点数运算bc
声明变量没赋值,默认为0。就是整数,设置scale=2设置得到结果保留小数点两位
比expr 多了一个指数运算
[root@docker-host sh]# 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'.
23+5
28
23/5
4
scale=2
23/5
4.60
scale=5
23/5
4.60000
上面演示的是交互方式。如果用命令行,需要用到管道符
[root@docker-host sh]# echo "scale=2;23/5" | bc
4.60
[root@docker-host sh]# echo "23/5" | bc
4
[root@docker-host sh]# echo "2^2" | bc
4
[root@docker-host sh]# echo "2^10" | bc
1024
第一个命令用;分开为两个 重定向 bc
[root@docker-host sh]# num=$(echo “2^3” | bc)
[root@docker-host sh]# echo $num
8