1. expr(evaluate expressions)命令的用法:
expr命令一般用于整数值,当也可用于字符串,用来求表达式变量的值,同时expr也是一个手工命令行计算器。
语法:expr expression
[yanwei@yanwei-04 logs]$ expr 2 + 2 4 [yanwei@yanwei-04 logs]$ expr 2 - 2 0 [root@1-241 ~]# expr 2 * 2 expr: 语法错误 [root@1-241 ~]# expr 2 \* 2 4 [root@1-241 ~]# expr 2 + 2 4 [root@1-241 ~]# expr 2+2 2+2 [root@1-241 ~]# expr 2 / 2 1 [root@1-241 ~]# expr 2 \*\* 2 expr: 语法错误 [root@1-241 ~]# expr 2 % 2 0
提示:
1) 注意运算符左右都有空格
2) 使用乘号时,必须用反斜线屏蔽其特定含义。因为shell可能会误解星号的含义。
2. 增量计数
expr在循环中可用于增量计算。首先,循环初始化为0,然后循环值加1,反引号的用法为命令替代,最基本的一种是从expr命令接收输出并将之放入循环变量。
例:给自变量i加1
[root@1-241 ~]# i=0 [root@1-241 ~]# i=`expr $i + 1` [root@1-241 ~]# echo $i 1
expr$[$a+$b]表达式形式,其中$a $b可以为整数值
[root@1-241 ~]# expr $[2+3] 5 [root@1-241 ~]# expr $[2*3] 6 [root@1-241 ~]# expr $[2**3] 8 [root@1-241 ~]# expr $[2/3] 0 [root@1-241 ~]# expr $[2%3] 2 [root@1-241 ~]# a=5 [root@1-241 ~]# b=6 [root@1-241 ~]# expr $[$a+$b] 11 expr 将其后的串解释为表达式并计算其值,运算符前后需有空格
其他特殊用法:
expr 用法ssh-copy-id脚本 if expr "$1":".*\.pub" ; then #expr id_dsa.pub : '.*\.pub',匹配*.pub格式的文件如果是则为真。例: #[oldboy@oldboy .ssh]$ expr "id_dsa.pub" : ".*\.pub" #10 这里是匹配后字符数 #man expr #string :regexp anchored pattern match of regexp in string [root@1-241 ~]# expr "test.pub" : ".*\.pub" && echo 1 ||echo 0 8 1 [root@1-241 ~]# expr "test.x" : ".*\.pub" && echo 1 ||echo 0 0 0
通过expr判断变量是否为整数
[root@1-241 scripts]# cat judge_int.sh read -p "pls input:"a expr $a + 0 &>/dev/null [ $? -eq 0 ] && echo int||echo chars 执行完 [root@1-241 scripts]# sh judge_int.sh pls input:a chars 加强版:持续等待输入连续判断,整数就退出,错误继续判断输入 [root@1-241 scripts]# cat judge_int.sh while true do read -p "pls input:" a expr $a + 0 &>/dev/null if [ $? -eq 0 ] then echo int exit 1 else echo chars fi done
执行结果: [root@1-241 scripts]# sh judge_int.sh pls input:a chars pls input:r chars pls input:12 int
通过expr计算字符串的长度
[root@1-241 scripts]# chars=`seq -s" " 100` [root@1-241 scripts]# echo ${#chars} 291 [root@1-241 scripts]# echo $(expr length "$chars") 291