前端之家收集整理的这篇文章主要介绍了
shell学习十--expr及expr和let性能比较,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
expr expr命令一般用于整数值,但也可用于字符串。 格式 :expr arg 一、计算 例子1: [root@node01 day4]# expr 2 + 2 4 [root@node01 day4]# expr 2 + 1 3 [root@node01 day4]# expr 2 - 1 1 [root@node01 day4]# expr 2 -1 两边都必须要有空格 expr:
Syntax error [root@node01 day4]# expr 2-2 两边都要空格 2-2 [root@node01 day4]# expr 2 - 1 1 [root@node01 day4]# expr 2- 1 两边都要空格 expr:
Syntax error [root@node01 day4]# expr 2 \*1 expr:
Syntax error [root@node01 day4]# expr 2 \* 1 两边都要空格 2 [root@node01 day4]# expr 2 % 2 0 [root@node01 day4]# expr 2 % 1 0 [root@node01 day4]# expr 2 % 3 2 [root@node01 day4]# expr 2 %3 两边都要空格 expr:
Syntax error
提示:expr
用法 1、注意:运算符及计算的数字左右两边都有至少一个空格 2、使用乘号(*)时,必须用反斜线
屏蔽其特定含义,因为shell可能会误解星号的含义 增量计数 expr在循环中可用于增量计算,首先,循环初始化为0,然后循环值
增加1,反引号的
用法为命令 替代最基本的一种是从(expr)命令接受
输出并将之放入循环变量。 例子2: [root@node01 day4]# i=0 [root@node01 day4]# i=`expr $i + 1` [root@node01 day4]# echo $i 1 [root@node01 day4]# b=`expr $i + 1` [root@node01 day4]# echo $b 2 例子3: [root@node01 day4]# expr $[2+3] 5 [root@node01 day4]# expr $[2 +3] 5 [root@node01 day4]# expr $[2 + 3] 5 [root@node01 day4]# echo $[2+3] 5 二、expr的特殊
用法 判断一个
文件的扩展名 [root@node01 day4]# vi `which ssh-copy-id` #!/bin/sh # Shell script to install your public key on a remote machine # Takes the remote machine name as an argument. # Obv
IoUsly,the remote machine must accept password authentication,# or one of the other keys in your ssh-agent,for this to work. ID_FILE="${HOME}/.ssh/id_rsa.pub" if [ "-i" = "$1" ]; then shift # check if we have 2 parameters left,if so the first is the new ID file if [ -n "$2" ]; then if expr "$1" : ".*\.pub" > /dev/null ; then 判断扩展名是pub ID_FILE="$1" else ID_FILE="$1.pub" fi 例子4 [root@node01 day4]# expr "test.pub " : ".*\.pub" && echo 1||echo 0 8 1 [root@node01 day4]# expr "test.pu " : ".*\.pub" && echo 1||echo 0 0 0 [root@node01 day4]# expr "test.pu " : ".*\.pub" >/dev/null && echo 1||echo 0 0 [root@node01 day4]# expr "test.pu " : ".*\.pub" &>/dev/null && echo 1||echo 0 0 例子5: [root@node01 day4]# vi expr.sh #!/bin/bash if expr "$1" : ".*\.pub" &>/dev/null; then echo "ok $1" else echo "pls use *.pub file" fi [root@node01 day4]# sh expr.sh a.sh pls use *.pub file [root@node01 day4]# sh expr.sh a.pub ok a.pub expr 整数判断 [root@node01 day4]# vi expr1.sh #!/bin/bash expr 1 + $1 &>/dev/null if [ $? -eq 0 ] then echo "zhengshu" else echo "no zhengshu" fi [root@node01 day4]# sh expr1.sh 1.1 no zhengshu [root@node01 day4]# sh expr1.sh 1 zhengshu 始终循环判断 [root@node01 day4]# vi expr2.sh #!/bin/bash while true do read -p "Pls input:" a expr $a + 0 >/dev/null 2>&1 [ $? -eq 0 ] &&echo int||echo chars done [root@node01 day4]# sh expr2.sh Pls input:1 int Pls input:3 int Pls input:^[[A chars Pls input: =============================================== expr "text.sh" : ".*\.sh" &>/dev/null && echo "yes" ||echo "no" expr 1 + $1 &>/dev/null&& echo 'yes' || echo 'no' 注意1 + $1和加号之间的空格 可以判断$1 是不是整数 三、expr计算字符串长度
提取指定字符的下标:expr index
内容 字符,例如:$ind=`expr index "$content" "="`
提取字符串的子串:expr substr
内容 起始位置 终点位置,例如:$con=`expr substr "$content" "1" $ind 1、、计算字串长度 [root@node01 day4]# expr length "bkeep zbb" 9 2、抓取字串 [root@node01 day4]# expr substr "bkeep zbb" 4 9 ep zbb 3、抓取第一个字符数字串出现的位置 [root@node01 day4]# expr index "bkeep zbb" e 3 四、let和expr
性能比较 [root@node01 day4]# vi exprtime.sh #!/bin/bash i=0 while [ $i -lt 100000 ] do i=` expr $i + 1 ` echo $i >>/dev/null 2>&1 done [root@node01 day4]# time sh exprtime.sh real 0m54.855s user 0m4.319s sys 0m7.641s [root@node01 day4]# vi lettime.sh #/bin/bash i=0 while [ $i -lt 100000 ] do let "i = $i + 1" echo $i >>/dev/null 2>&1 done [root@node01 day4]# time sh lettime.sh real 0m2.072s user 0m1.752s sys 0m0.320s 通过上面两个例子,不言而喻,很明显 let以超高的优势获胜,let快expr 几十倍!