zoukankan      html  css  js  c++  java
  • 表达式与运算符

      bash支持很多运算符,包括算数运算符、关系运算符、布尔运算符、字符串运算符和文件测试运算符。

    1、表达式

      bash的表达式可以分为算术表达式和逻辑表达式两种类型。

    1、算术表达式

      数学运算涉及到表达式求值。bash自身并不支持简单的数学运算,但是可以awk和expr等命令来实现数学运算,其中expr最为常用,使用它能够完成表达式的求值操作。示例,将两个数相加,同时将运算结果表达出来

    expr 5 + 3
    

      注意:操作数和运算符之间一定要有空格,否则expr会简单的将其当作字符串输出。

      当然,可以将计算的值用作变量,也可以将expr计算的结果赋值给变量。

    n=1
    
    m=5
    
    expr $n + $m
    
    val=`expr 2 + 2`
    
    echo $val

      注意,完整的表达式要用反引号"`"括起来。

      更为简单的方式是使用$[]表达式进行数学计算,例如

    val=$[5+3]
    echo $val
    

      

    这种形式不要求运算符和操作数之间有空格。

      还可以用let命令来计算整数表达式的值,如

    n=1
    m=5
    let val=$n+$m
    echo $val
    

      

    2、逻辑表达式

       逻辑表达式主要用于条件判断,值为true(或为0)表示结果为真,值为false表示结果为假。

      通常使用test命令来判断表达式的真假。语法格式如下:

    test 逻辑表达式
    

      例如以下语句用于比较两个字符串是否相等。

    test "abc"="xyz"
    

      test命令更常用方括号"[]"代替。语法格式如下

    [ 逻辑表达式 ]
    

       在使用左方括号而非test时,其后必须始终跟着一个空格、要评估的逻辑表达式、一个空格和右方括号,右方括号表示所需评估表达式的结束。逻辑表达式两边的空格是必需的,这表示调用test,以区别于同样经常使用方括号的字符、模式匹配操作。

      逻辑表达式判断表达式的结果,然后返回真假,通常和if、while或until命令结合使用,用于条件判断,以便对程序流进行广泛的控制。

    2、算术运算符

      算术运算符用于数值计算,主要的算术运算符列表如下:

    +:加法
    -:减法
    *:乘法
    /:除法
    %;取余值
    =:赋值
    

      这里给出一个使用算术运算符的例子

    #!/bin/bash
    a=1
    b=2
    val=`expr $a + $b`
    echo "a + b : $val"
    #乘法(*)前面必须加转义符号反斜杠()才能实现乘法操作
    val=`expr $a * $b`
    echo "a*b:$val"
    

      

    3、整数关系运算符

       Shell支持整数比较,还需要使用整数关系运算符,列表如下:

    -eq:相等,检测两个数是否相等,相等返回true
    -ne:不等于。检测两个数是否相等,不相等返回true
    -gt:大于。检测左边的数是否大于右边的,如果是,返回true
    -lt:小于。检测左边的数是否小于右边的,如果是,返回true
    -ge:大于等于
    -le:小于等于
    

       下面是一个关系运算符的例子

    #!/bin/bash
    
    a=10
    
    b=20
    
    if [ $a -eq $b ]
    
    then 
    
    	echo "$a -eq $b :a等于b"
    
    else
    
    	echo "$a -eq $b:a不等于b"
    
    fi
    

      

    4、字符串检测运算符

      字符串运算符用于检测字符串,列表如下:

    =:检测两个字符串是否相等,相等返回true。
    !=:检测两个字符串是否相等,不相等返回true。
    -z:检测字符串长度是否为0,为0返回true。
    -n:检测字符串长度是否为0,不为0返回true。
    str:检测字符串是否为空,不为空返回true。
    

      下面给出一个例子

    #!/bin/bash
    a="abc"
    b="xyz"
    if [ $a = $b ]
    then 
    	echo "$a = $b :a等于b"
    else 
    	echo "$a = $b :a不等于b"
    fi
    	if [ -z $a ]
    then 
    	echo "-z $a :字符串长度为0 "
    else 
    	echo "-z $a 字符串长度不为0 "
    fi 
    	if [ $a ]
    then 
    	echo "$a :字符串为非空"
    else
    	 echo "$a :字符串为空"
    fi

     

    5、文件测试运算符

      文件测试运算符用于检测文件的各种属性,以文件名为参数

    -b:检测文件是不是块设备文件,如果是,则返回true。
    -c:检测文件是不是字符设备文件,如果是,则返回true。
    -d :检测文件是不是目录,如果是,则返回true。
    -f:检测文件是不是普通文件,如果是,则返回true。
    -g:检测文件是否设置了SGID位,如果是,则返回ture。
    -k:检测文件是否设置了粘着位,如果是,则返回true。
    -p:检测文件是不是具名管道,如果是,则返回,true。
    -u:检测文件是是否设置了SUID位,如果是,则返回ture。
    -r:检测文件是否刻度,如果是,则返回true。
    -w:检测文件是否可写,如果是,则返回true。
    -x :检测文件是否可执行,如果是,则返回true。
    -s:检测文件是否为空,不为空则返回true。
    -e:检测文件是否存在,如果是,则返回true。
    

      例如,下面的代码将检测/bin/bash的读写属性

    #!/bin/bash
    file="/bin/bash"
    if [ -r $file ]
    then 
      echo "文件具备读取权限"
    else
      echo "文件不具备读取权限"
    fi
    if [ -w $file ]
      then 
      echo "文件具备写入权限"
    else
      echo "文件不具备写入权限"
    fi

    6、布尔运算符

      布尔运算符用于对一个或多个逻辑表达式执行逻辑运算,结果为true或为false。通常用来对多个条件进行判断。有与、或、非3个运算符。

      -a:与运算。两个条件都为true才返回true。

      -o:或运算。有一个表达式为true就返回true。

      !:非运算。表达式为true,则返回false,否则返回true。

    这里给出一个示例:

    #!/bin/bash
    
    a=5
    
    b=10
    
    if [ $a -lt 10 -a $b -gt 15 ]
    
       then 
    
    	echo "两个条件都满足"
    
    else 
    
    	echo "两个条件都不满足"
    
    fi
    

      

  • 相关阅读:
    hdu 4309(最大流+枚举状态)
    hdu 1565+hdu 1569(最大点权独立集)
    hdu 3657(最大点权独立集)
    hdu 3491(最小割+拆点)
    hdu 4394(bfs)
    An Introduction to Numerical Analysis Example 6.1
    陶哲轩谈数学家的合作(来自陶哲轩在数学家Gowers的博文“Is massively collaborative mathematics possible?”上的评论)
    拉格朗日插值多项式之间的递推关系
    三角形的余弦定理
    三角形的余弦定理
  • 原文地址:https://www.cnblogs.com/noticeable/p/8858469.html
Copyright © 2011-2022 走看看