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
    

      

  • 相关阅读:
    How To : OCR / Vote disk Maintenance Operations: (ADD/REMOVE/REPLACE/MOVE)
    循序渐进解读Oracle AWR性能分析报告
    为11gR2 Grid Infrastructure增加新的public网络
    12C开始oracle实现了SCALABLE LGWR多进程并行写redo log
    万字详解Oracle架构、原理、进程,学会世间再无复杂架构
    PowerShell 连接SQL Server 数据库
    Oracle 性能分析与诊断|跟踪诊断&优化SQL 语句
    安装oracle 11gr2 rac on solaris
    oracle EOS
    K8S集群认证之RBAC
  • 原文地址:https://www.cnblogs.com/scajy/p/12765521.html
Copyright © 2011-2022 走看看