Shell变量的高级用法(六)——bash数学运算

2022-01-25  本文已影响0人  醜捌怪

语法格式

语法
方法一 expr $num1 operator $num2
方法二 $(($num1 operator $num2))

expr操作符对照表

操作符 含义
num1 | num2 num1不为空且非0,返回num1;否则返回num2
num1 & num2 num1不为空且非0,返回num1;否则返回0
num1 < num2 num1小于num2,返回1;否则返回0
num1 <= num2 num1小于等于num2,返回1;否则返回0
num1 = num2 num1等于num2,返回1;否则返回0
num1 != num2 num1不等于num2,返回1;否则返回0
num1 > num2 num1大于num2,返回1;否则返回0
num1 >= num2 num1大于等于num2,返回1;否则返回0
num1 + num2 求和
num1 - num2 求差
num1 * num2 求积
num1 / num2 求商
num1 % num2 求余

注意:

  • 对于 |、&、<、>、*等运算需要转义\
  • 格式 expr<空格><操作数1><空格><运算符><空格><操作数2>
  • 只能用于整数运算

expr算术运算等价于$(())。示例如下:

$((num1 | num2))
$((num1 & num2))
$((num1 < num2))
$((num1 <= num2))
$((num1 == num2)) #注意、判断是否相等需要用==
......

用$(())方式算术运算,运算符不需要转义。

bc运算器

示例

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

代码如下:

#!/bin/bash
#

while true
do
    read -p "请输入一个正整数:" num
    #尝试做加法运算,如果运算成功,则说明是整数;否则不为整数。
    #如果运算成功,则$?的值为0,否则不为0
    expr $num + 1 &> /dev/null
    if [ $? -eq 0 ]; then
        #判断是否大于0
        if [ `expr $num \> 0` -eq 1 ]; then
            sum=0
            for((i=1; i<=$num; i++))
            do
                sum=`expr $sum + $i`
            done
            echo "1+2+3+...+$num=$sum"
            exit
        fi
    else
        echo "输入非法,请重新输入"
        continue
    fi
done

例子2:不设置scale,默认为0。

➜ ~ echo "22+33" | bc
55

例子3:设置scale小数点位数为2。

➜ ~ echo "scale=2;22.5/3.3" | bc
6.81

通过管道直接传给bc运算器。

上一篇下一篇

猜你喜欢

热点阅读