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 &amp;> /dev/null
if [ $? -eq 0 ];then
        if [  ` expr $num \> 0 ` -eq 1 ];then
                for((i=1;i&lt;=$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
Last modification:February 1, 2020
如果觉得我的文章对你有用,请随意赞赏