zoukankan      html  css  js  c++  java
  • shell-变量的数值运算与特殊应用expr

    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
    

      

  • 相关阅读:
    RUST实践.md
    redis.md
    opencvrust.md
    aws rds can't connect to mysql server on 'xx'
    Foundation ActionScript 3.0 With Flash CS3 And Flex
    Foundation Flash Applications for Mobile Devices
    Flash Mobile Developing Android and iOS Applications
    Flash Game Development by Example
    Actionscript 3.0 迁移指南
    在SWT中非UI线程控制界面
  • 原文地址:https://www.cnblogs.com/scajy/p/12765521.html
Copyright © 2011-2022 走看看