数学运算的两种方式
语法 | |
---|---|
方法一 | expr $num1 opeartor $num2 |
方法二 | $(($num1 operator $num2)) |
expr 操作符对照表
expr支持正常的操作符。
操作符 | 含义 |
---|---|
num1 | num2 | num1不为空且非0,返回num1,否则返回num2 |
num1 & num2 | num1不为空且非0,返回num1,否则返回0 |
示例
数值比较操作(> < >= <= != =)
num1=100
num2=50
expr num1 \> num2 # 此处要加\ 因为> 在shell中是重定向符号
>>>1
运算后赋值到其他变量
num3=`expr $num1 \* $num2` # 需要转义符号
num3=$(($num1 * $num2)) # 无需转义
$(($num1 * $num2)) # 直接在命令行中写是会报错的
注意:$(())可能不支持某些运算符号
num1=20
num2=30
num3=$(($num1=$num2))
>>>20=30: attempted assignment to non-variable (error token is "=30")
num3=`expr $num1 = $num2`
>>> num3=0
练习
计算1+2+3…+num的和,判断用户输入的num是否为正整数,不符合则继续提示用户输入
# 判断是否为正整数思路
1.$num + 1 如果执行结果为0,说明是整数
2.`expr $num \> 0` -eq 1 判断大于0
#!/bin/bash
#
while true
do
read -p "please input a positive number:" num
expr $num + 1 &> /root/shell/null
if [ $? -eq 0 ];then
if [ `expr $num \> 0` -eq 1 ];then
echo "yes"
for((i=1;i<=$num;i++))
do
sum=`expr $sum + $i`
done
echo "1+2+3+...+$num = $sum"
exit
fi
fi
echo "erro"
continue
done