Linux_expr命令

先看var=$var2+$var3

1
2
3
4
5
6
7
8
mrcan@ubuntu:~$ var=1+2
mrcan@ubuntu:~$ echo $var
1+2
mrcan@ubuntu:~$ var2=2
mrcan@ubuntu:~$ var3=3
mrcan@ubuntu:~$ var=$var2+$var3
mrcan@ubuntu:~$ echo $var
2+3

我们发现,var=$var2+$var3未能让2+3的结果5赋给var,而是以字符串的形式给了var。

expr

用于计算数值类。

which发现expr是存在/usr/bin/expr下的,说明是个常用的命令。

1
2
mrcan@ubuntu:~$ expr 1+2
1+2

我们发现,以字符串的形式输出了expr的结果。明显不是我们想要的。
因为要计算数值的话,在运算符前后要加空格分隔开!

1
2
mrcan@ubuntu:~$ expr 1 + 2
3
1
2
mrcan@ubuntu:~$ expr $var2 + $var3
5

把expr的结果赋给环境变量

1
2
mrcan@ubuntu:~$ var=expr $var2 + $var3
2: command not found
1
2
3
mrcan@ubuntu:~$ var=(expr $var2 + $var3)
mrcan@ubuntu:~$ echo $var
expr

以上两种都是错误的。

要用“命令代换”。

看:《Linux_重定向#命令代换》命令代换
正确的方式:****

1
2
3
mrcan@ubuntu:~$ var=$(expr $var2 + $var3)
mrcan@ubuntu:~$ echo $var
5

使用expr编写从1加到100的脚本

1
2
3
4
5
6
7
8
9
10
#! /bin/sh

I=1
SUM=0
while (test $I -le 100) # 可以简写为 while [ $I -le 100 ]
do
SUM=$(expr $SUM + $I)
I=$(expr $I + 1)
done
echo "sum of 1 ... 50 is "$SUM
1
2
mrcan@ubuntu:~$ ./testif.sh 
sum of 1 ... 50 is 505

乘号需要转义

1
2
3
4
mrcan@ubuntu:~$ expr 56 * 9
expr: syntax error: unexpected argument ‘a.c’
mrcan@ubuntu:~$ echo $?
2

在expr命令中,乘号不能直接写,而是要\*转义。

1
2
mrcan@ubuntu:~$ expr 56 \* 9
504

除号不用转义。

1
2
mrcan@ubuntu:~$ expr 56 / 9
6