语法格式
语法 | |
方法二 | expr $num1operator$num2 |
方法二 | $(($num1operator$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 |
遇到了一些不同的东西,Linux中使用expr表达式,关键字符需要加上转义字符,不然会出现错误。
expr $num1 \| $num2 expr $num1 \& $num2 expr $num1 \> $num2
虽然 (())
也是做计算的,效果上和expr表达式相似,但是也有不同的地方
#在(())中下面表达式进行的是 位与和位或的操作,这个和expr表达式是不一样的 #(())的运算需要赋值给一个变量,直接运行会报错 $((num1 & num2)) $((num1 | num2))
常用算术操作符
操作符 | 含义 |
num1+num2 |
求和 |
num1-num2 |
求差 |
num1*num2 |
求积 |
num1/num2 |
求商 |
num1%num2 |
求余 |
关系运算符
关系运算符只支持数字,不支持字符串,除非字符串也是数字
操作符 | 含义 |
$num1-eq $num2 |
判断两个数是否相等,相等返回true |
$num1-ne $num2 |
判断两个数是否不相等,不相等返回true |
$num1-gt $num2 |
判断左边的数是否大于右边的,如果是,返回true |
$num1-lt $num2 |
判断左边的数是否小于右边,如果是,返回true |
$num1-ge $num2 |
判断左边的数是否大于等于右边的,如果是,返回true |
$num1-le $num2 |
判断左边的数是否小于等于右边,如果是,返回true |
练习
输入一个正整数,然后计算1+2+3+...+num的值;必须对num是否为正整数做判断,不符合应当允许再次输入
#!/bin/bash # while true do read -p "Pls input a number: " num # 通过expr表达式进行计算,如果两个参与计算的数都是整数,则返回值为0,否则不为0 # /dev/null:表示 的是一个黑洞,通常用于丢弃不需要的数据输出 expr $num + 1 &> /dev/null if [ $? -eq 0 ] then if [ $num -gt 0 ] then for((i=i;i<$num;i++)) do sum=`expr $sum + $i` done echo "1+2+3+...+$num = $sum" exit fi fi echo "Error" done
拓展bc命令
- bc是bash内建的运算器,支持浮点数运算
- 内建变量scale可以设置,默认为0
echo "43 + 5" | bc echo "scale=4;10/3" | bc