语法格式
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需要使用\转译
- $(( ))不需要转译 注意此种运算方式不支持= 和!= 推荐:只使用 + - * / 和 %
- expr数学运算只能对整数 不支持浮点数
num1=30
num2=50
expr $num1 \> $num2
expr $num1 \<= $num2
expr $num1 \* $num2
expr $num1 + $num2
num3=`expr $num1 - $num2`
echo $num3
num3=$((num1+num2))
echo $num3
复制代码
练习
- 用户输入一个正整数num 然后计算1+2+3+...+num,输出结果
#!/bin/bash
while true
do
read -p "Please input a positive number: " num
expr $num + 1 &> /dev/null
if [[ $? -eq 0 && $num -gt 0 ]]; then
sum=0
for((i=1;i<=$num;i++))
do
sum=`expr $i + $sum`
done
echo "1+2...$num = $sum"
exit
else
echo "Number is invalid, pleace try again! "
continue
fi
done
复制代码
浮点数运算
- bc是bash内建的运算容器,支持浮点数运算
- 内建变量scale(精确度,可以理解为小数位数)可以设置,默认为0
- bc有的linux内置,有的没有内置 (我使用centos 7.x server 是没有的 可以直接
yum install bc
)
bc操作符对照表
操作符 | 含义 |
---|
num1 + num2 | 加 |
num1 - num2 | 减 |
num1 * num2 | 乘 |
num1 / num2 | 除 |
num1 % num2 | 取余 |
num1 ^ num2 | 指数运算 |
演示
echo "23 / 12" | bc
echo "23.2 + 12" | bc
echo "scale=2; 23.3 / 12" | bc
echo "10 / 3 * 2" | bc
echo "scale=4; 10 / 3 * 2" | bc
复制代码
输入两个数相加
#!/bin/bash
read -p "Please input num1:" num1
read -p "Please input num2:" num2
result=`echo "$num1 + $num2" | bc`
echo $result
复制代码
转载于:https://juejin.im/post/5d050a356fb9a07f0b03c0db