shell中let和expr用法及性能比较

1、expr计算整数变量值

格式 :expr arg

例子:计算(2+3)×4 的值
1、分步计算,即先计算2+3,再对其和乘
4
s=`expr 2 + 3`
expr $s \* 4
2
、一步完成计算:
expr  `expr 2 + 3 `  \* 4
说明:
运算符号和参数之间要有空格分开;
通配符号(*),在作为乘法运算符时要用\、“”、‘’符号修饰
:expr 3 \* 2         expr 3 “*” 2       expr 3 ‘*’ 2 
 `(反引号)与键盘上的~同一个键上的符号 
 
[fsy@localhost ~]$ s=`expr 2 + 3`
[fsy@localhost ~]$ echo $s
5
[fsy@localhost ~]$ expr $s \* 4
20
[fsy@localhost ~]$ expr `expr 2 + 3` \* 4
20
[fsy@localhost ~]$ expr 2 \* 3
6
[fsy@localhost ~]$ expr 2 "*" 3
6
[fsy@localhost ~]$ expr 2 '*' 3
6
[fsy@localhost ~]$ expr 2 * 3
expr: 语法错误
[fsy@localhost ~]$
 
2、let命令

格式:let arg1 [arg2 ......]

说明:

与expr命令相比,let命令更简洁直观
 [ ]表示可以有多个参数,arg n (n=1,2…)
 运算符与操作数据之间不必用空格分开,但表达式与表达式之间必须要用空格分开
当运算符中有<、>、&、|等符号时,同样需要用引号(单引号、双引号)或者斜杠来修饰运算符
例子:计算(2+3)×4 的值
[fsy@localhost ~]$ let s=(2+3)*4
[fsy@localhost ~]$ echo $s
20
[fsy@localhost ~]$
 
3、expr与let性能比较
1、expr脚本与执行时间:
  1. #!/bin/bash
  2. s=0
  3. while [ $s -lt 10000 ]
  4. do
  5.        s=`expr $s + 1`
  6.        echo $s >>/dev/null 2>&1
  7. done
  8. [root@xaosa ~]# time sh expr.sh 

    real    0m50.776s
    user    0m11.528s
    sys     0m39.601s
2、let脚本与执行时间:

  1. #!/bin/bash
  2. s=0
  3. while [ $s -lt 10000 ]
  4. do
  5.        let "s = $s + 1"
  6.        echo $s >>/dev/null 2>&1
  7. done
  8. [root@xaosa ~]# time sh let.sh 
  9. real    0m0.875s
    user    0m0.676s
    sys     0m0.199s

通过上面两个例子,不言而喻,很明显 let以超高的优势获胜,let快expr 几十倍!
 
本文来自:http://blog.csdn.net/fansongy/article/details/6724228
http://yooma.blog.51cto.com/6965726/1187063

猜你喜欢

转载自daizj.iteye.com/blog/2255906