在 shell 中的四则运算必须使用 expr 这个指令来辅助。因为这是一个指令,所以如果要将结果指定给变量,必须使用 ` 包起来。请注意,在 + - * / 的二边都有空白,如果没有空白将产生错误:
$ expr 5 -2
3
$ sum=`expr 5 + 10`
$ echo $sum
15
$ sum=`expr $sum / 3`
$ echo $sum
5
还有一个要特别注意的是乘号 * 在用 expr 运算时,不可只写 *。因为 * 有其它意义,所以要使用 \* 来代表。另外,也可以用 % 来求余数。
$ count=`expr 5 \* 3`
$ echo $count
$ echo `expr $count % 3`
5
我们再列出更多使用 expr 指令的方式,下列表中为可以放在指令 expr 之后的表达式。有的符号有特殊意义,必须以 \ 将它的特殊意义去除,例如 \*,否则必须用单引号将它括起来,如 '*':
类别
语法
说明
条件判断
expr1 \| expr2
如果 expr1 不是零或 null 则传回 expr1,否则传回 expr2。
expr1 \& expr2
如果 expr1 及 expr2 都不为零或 null,则传回 expr1,否则传回 0。
四则运算
expr1 + expr2
传回 expr1 加 expr2 后的值。
expr1 - expr2
传回 expr1 减 expr2 后的值。
expr1\* expr2
传回 expr1 乘 expr2 后的值。
expr1 / expr2
传回 expr1 除 expr2 后的值。
expr1 % expr2
传回 expr1 除 expr2 的余数。
大小判断
expr1 \> expr2
如果 expr1 大于 expr2 则传回 1,否则传回 0。如果 expr1 及 expr2 都是数字,则是以数字大小判断,否则是以文字判断。以下皆同。
expr1 \
如果 expr1 小于 expr2 则传回 1,否则传回 0。
expr1 = expr2
如果 expr1 等于 expr2 则传回 1,否则传回 0。
expr1 != expr2
如果 expr1 不等于 expr2 则传回 1,否则传回 0。
expr1 \>= expr2
如果 expr1 大于或等于 expr2 则传回 1,否则传回 0。
expr1 \
如果 expr1 小于或等于 expr2 则传回 1,否则传回 0。
文字处理
expr1 : expr2
比较一固定字符串,即 regular expression。可以使用下列字符来辅助:
. 匹配一个字符。
$ 找字符串的结尾。
找符合 list 中的任何字符串。
* 找寻 0 个或一个以上在 * 之前的字。
\( \) 传回括号中所匹配的字符串。
我们针对比较复杂的文字处理部份再加以举例:
$ tty
ttyp0
$ expr `tty` : ".*\(..\)\$"
p0
$ expr `tty` : '.*\(..\)$'
p0
上面执行 tty 的结果是 ttyp0,而在 expr 中,在 : 右侧的表达式中,先找 .*
表示0个或一个以上任何字符,传回之后在结尾 ($) 时的二个字符 \(..\)。在第一个 expr 的式子中,因为使用双引号,所以在 $
之前要用一个 \ 来去除 $ 的特殊意义,而第二个 expr 是使用单引号,在单引号内的字都失去了特殊意义,所以在 $ 之前不必加 \。
除了使用 expr 外,我们还可以使用下列这种特殊语法:
$ a=10
$ b=5
$ c=$((${a}+${b}))
$ echo $c
15
$ c=$((${a}*${b}))
$ echo $c
50
我们可以使用 $(()) 将表达式放在括号中,即可达到运算的功能。
阅读(637) | 评论(0) | 转发(0) |