shell 数学运算

数学运算之 expr

expr操作符对照表

比较大小,只能对整数进行比较,需要加空格,linux 保留关键字要转义

num1=30
num2=50
expr $num1 \> $num2

查看上一条命令有没有执行成功

echo $?

返回0 成功,其他失败

小于、小于等于、大于等于

expr $num1 \< $num2
expr $num1 \<= $num2
expr $num1 \>= $num2

 

运算 加、减、乘、除

# 加
num1=17
num2=5
expr $num1 + $num2

# 减
num3=`expr $num1 + $num2`
echo $num3

expr $num1 - $num2

# 乘
expr $num1 \* $num2
expr $num1 / $num2

# 取余数
expr $num1 % $num2

  

 需要注意事项:

两个小括号的计算方法,要赋值,否则会报错

# 直接输出报错
$(($num1+$num2))

# 需要赋值给一个变量
num3=$(($num1+$num2))
echo $num3

num3=$(($num1*$num2))
echo $num3

num3=$(($num1-$num2))
echo $num3

num3=$(($num1/$num2))
echo $num3

 

 

一些操作符在$(()) 不支持, 在比较运算的时候最好使用expr

num1=5
num2=5
num3=$(($num1=$num2))

expr $num1 = $num2

练习例子  

提示用户输入一个正整数num,然后计算1+2+3+...+num的值;必须对num是否为正整数做判断,不符合应当运行再次输入

判断是否是一个正整数

思路:

  • expr只能对整数进行计算,直接用expr 和一个整数计算获取 $? 的值来判断是否为整数
  • 在使用 expr $num1 \> 0 判断是否大于0
# 不是整数使用 expr 进行数学运算会出错
num1=56.58
expr $num1 + 1

  

 

sum.sh

#!/bin/bash
#
while true
do
        read -p "please input a positive number: " num
        # 判断数是否是整数
        expr $num + 1 &> /dev/null
        if [ $? -eq 0 ];then
                # 判断这个整数是否大于0,大于0返回1
                if [ `expr $num \> 0` -eq 1 ];then
                        #echo "yes,positive number"
                        # $sum没有赋值,默认为0
                        for((i=1;i<=$num;i++))
                        do
                                sum=`expr $sum + $i`
                        done
                        echo "1+2+3+...+$num = $sum"
                        # 执行计算需要退出
                        exit
                fi
        fi
        echo "error,input enlegal"
        continue
done

执行脚本

sh sum.sh

猜你喜欢

转载自www.cnblogs.com/crazymagic/p/11071871.html