zoukankan      html  css  js  c++  java
  • shell--3.运算符

    1.注意
    原生bash不支持简单的数学运算,但是可以用其它命令来实现如 awk 和expr ,expr最常用

    val=`expr 2 + 3`
    echo "结果 ${val}" #打印5

    (1)表达式和运算符之间要有空格,如2+2是不对的,要写成 2 + 2
    (2)完整的表达式要被` ` 包含,这不是单引号,是反引号在Esc 键下面

    2.算术运算符

    #!/bin/bash
    a=20
    b=3
    
    echo "a+b结果: `expr $a + $b`"
    
    echo "a-b结果: `expr $a - $b`"
    
    echo "a*b结果: `expr $a * $b`"
    
    echo "a/b结果: `expr $a / $b`"
    
    echo "a对b取余: `expr $a % $b`"
    
    a=30
    echo "a重新赋值为 ${a}"
    
    if [ $a == $b ] 
    then
    echo "a等于b"
    fi
    if [ $a != $b ]
    then
    echo "a不等于b"
    fi

    #注意,if和后面的[] 之间要有空格,[] 和里面的$a之间要有空格,==与$a和$b之间要有空格
    乘法之前要有反斜杠

    3.关系运算符

    (1) 关系运算符只支持数字,不支持字符串,除非字符串的值也是数字

    a. -eq,判断两个数是否相等,相等返回true

    b=30
    if [ $a -eq $b ]
    then
    echo "a等于b"
    else
    echo "a不等于b"
    fi

    b. -ne,判断两个数是否相等,不相等返回true

    if [ $a -ne $b ]
    then
    echo "-ne a不等于b"
    else
    echo "-ne a等于b"
    fi


    c. -gt, 检测左边的数是否大于右边的,如果是返回true

    if [ $a -gt $b ]
    then
    echo "-gt a大于b"
    else
    echo "-gt a小于b"
    fi

    d. -lt , 检测左边的数是否小于右边的,如果是返回true

    if [ $a -lt $b ]
    then
    echo "-lt a小于b"
    else
    echo "-lt a大于b"
    fi



    e. -ge , 检测左边的数是否大于等于右边的数

    if [ $a -ge $b ]
    then
    echo "-ge a大于等于b"
    else
    echo "-ge a小于等于b"
    fi



    f. -le , 检测左边的数是否小于等于右边的数

    if [ $a -le $b ]
    then
    echo "-le a小于等于b"
    else
    echo "-le a大于等于b"
    fi

    4. 布尔运算符

    a. !,非运算,表达式返回true,则返回false

    if [ $c != $d ]
    then
    echo "c!=d : c不等于d"    
    else
    echo "c!=d : c等于d"
    fi


    b. -o,或运算,有一个返回true,则返回true

    d=10
    if [ $c -gt $d -o $c -eq $d ]
    then
    echo "-o c大于或等于d"
    else
    echo "-o c小于d"
    fi

    c. -a,与运算,两个都返回true,才返回true

    if [ $c -gt $d -a $c -ne $d ]
    then
    echo "-a c大于d"
    else
    echo "-a c小于或等于d"
    fi

    5. 逻辑运算符

    a. &&,逻辑的and

    c=10
    d=20
    
    if [[ $c -lt 100 && $d -gt 100 ]]    
    then
    echo "&& 返回true"
    else
    echo "&& 返回false"
    fi


    b. ||,逻辑的或

    if [[ $c -lt 100 || $d -lt 100 ]]
    then
    echo "|| 返回true"
    else
    echo "|| 返回false"
    fi

    6. 字符串运算符

    a. =,检测两个字符串是否相等,相等返回true

    m="abc"
    n="def"
    k=""
    ###等于
    if [ $m = $n ]
    then
    echo "= m等于n "
    else
    echo "= m不等于n "
    fi


    b. !=,检测两个字符串是否不相等,不相等返回true

    if [ $m != $n ]
    then
    echo "!= m不等于n"
    else
    echo "!= m等于n"
    fi

    c. -z , 检测字符串长度是否为0,为0返回true

    if [ -z $m ]
    then
    echo "-z m长度是0"
    else
    echo "-z m长度不是0"
    fi
    
    if [ -z $k ]
    then
    echo "k长度是0"
    fi

    d. -n , 检测字符串长度是否为0,不为0返回true

    if [ -n $m ]
    then
    echo "-n m长度不为0"
    else
    echo "-n m长度是0"
    fi

    e. str , 检测字符串是否为空,不为空返回true

    k=" "
    echo "k的长度" ${#k}
    if [ $k ]
    then
    echo "k不为空"
    else
    echo "k为空"    
    fi
    打印k的长度是3,k为空

    7. 文件运算符

    a. -b , 是否是块设备
    file_temp="/opt/shell_test/test.sh"

    if [ -b $file_temp ]
    then
    echo "${file_temp} 是块设备"
    else
    echo "${file_temp} 不是块设备"
    fi

    b. -e ,文件是否存在

    c. -d , 文件是否是目录

    d. -s ,文件是否为空

    e. -r ,文件是否可读

    f. -w , 文件是否可写

    g. -x , 文件是否可执行

    file_temp="/opt/shell_test/arry.sh"
    #-b 文件是否是块设备
    if [ -b $file_temp ]
    then
       echo "${file_temp} 是块设备"
    else
       echo "${file_temp} 不是块设备"
    fi
    
    #文件是否存在
    if [ -e $file_temp ]
    then
       echo "-e 文件存在"
    else
       echo "-e 文件不存在"
    fi
    
    #是否是目录
    if [ -d $file_temp ]
    then
       echo "-d 文件是目录"
    else
       echo "-d 文件不是目录"
    fi
    
    
    #是否为空
    if [ -s $file_temp ]
    then
       echo "-s 文件为空"
    else
       echo "-s 文件不为空"
    fi
    
    #是否可读
    if [ -r $file_temp ]
    then
       echo "-r 文件可读"
    else
       echo "-r 文件不可读"
    fi
    
    #是否可写
    if [ -w $file_temp ]
    then
       echo "-w 文件可写"
    else
       echo "-w 文件不可写"
    fi
    
    #是否可执行
    if [ -x $file_temp ]
    then
       echo "-x 文件可执行"
    else
       echo "-x 文件不可执行"
    fi
  • 相关阅读:
    Python 连接SQLite数据库 及基础操作
    删除爬取字符串中的特殊字符
    网页爬虫中xa0、u3000等字符的解释及去除
    File 文件操作及模式说明
    【re】模块运用,正则匹配操作 待编辑
    MySQL
    正则表达式的常用操作符
    pip操作
    Python 常见运算
    Python32 1.半连接数 2.粘包问题解决
  • 原文地址:https://www.cnblogs.com/fubaizhaizhuren/p/5703837.html
Copyright © 2011-2022 走看看