• Shell运算符


    Shell 和其他编程语言一样,支持多种运算符,包括:

    • 算数运算符
    • 关系运算符
    • 布尔运算符
    • 字符串运算符
    • 文件测试运算符

    expr

    expr是一款表达式计算工具,使用它能完成表达式的求值操作。

    expr只能做加减运算

    算术运算符

    +加

    -减

    *乘

    /除

    %取余

    =赋值

    ==等于

    !=不等于

    算术运算符实例如下:

    #!/bin/bash
    a=10
    b=20
    val=`expr $a + $b`
    echo "a + b : $val"
    val=`expr $a - $b`
    echo "a - b : $val"
    val=`expr $a * $b`
    echo "a * b : $val"
    val=`expr $b / $a`
    echo "b / a : $val"
    val=`expr $b % $a`
    echo "b % a : $val"
    if [ $a == $b ]
    then
       echo "a 等于 b"
    fi
    if [ $a != $b ]
    then
       echo "a 不等于 b"
    fi

    关系运算符

    运算符

    说明

    -eq

    检测两个数是否相等,相等返回true。

    -ne

    检测两个数是否相等,不相等返回true。

    -gt

    检测左边的数是否大于右边的,如果是,则返回true。

    -lt

    检测左边的数是否小于右边的,如果是,则返回true。

    -ge

    检测左边的数是否大于等于右边的,如果是,则返回true。

    -le

    检测左边的数是否小于等于右边的,如果是,则返回true。

    布尔运算符

    运算符

    说明

    !

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

    -o

    或运算,有一个表达式为true 则返回 true。

    -a

    与运算,两个表达式都为true才返回true。

    #!/bin/bash
    a=10
    b=20
    if [ $a != $b ]
    then
       echo "$a != $b : a 不等于 b"
    else
       echo "$a != $b: a 等于 b"
    fi
    if [ $a -lt 100 -a $b -gt 15 ]
    then
       echo "$a -lt 100 -a $b -gt 15 : 返回 true"
    else
       echo "$a -lt 100 -a $b -gt 15 : 返回 false"
    fi
    if [ $a -lt 100 -o $b -gt 100 ]
    then
       echo "$a -lt 100 -o $b -gt 100 : 返回 true"
    else
       echo "$a -lt 100 -o $b -gt 100 : 返回 false"
    fi
    if [ $a -lt 5 -o $b -gt 100 ]
    then
       echo "$a -lt 100 -o $b -gt 100 : 返回 true"
    else
       echo "$a -lt 100 -o $b -gt 100 : 返回 false"
    fi

    逻辑运算符

    运算符

    说明

    &&

    逻辑的AND

    ||

    逻辑的OR

    字符串运算符

    运算符

    说明

    =

    检测两个字符串是否相等,相等返回 true。

    !=

    检测两个字符串是否相等,不相等返回 true。

    -z

    检测字符串长度是否为0,为0返回 true。

    -n

    检测字符串长度是否为0,不为0返回 true。

    str

    检测字符串是否为空,不为空返回 true。

    #!/bin/bash
    a="abc"
    b="efg"
    if [ $a = $b ]
    then
       echo "$a = $b : a 等于 b"
    else
       echo "$a = $b: a 不等于 b"
    fi
    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 [ -n $a ]
    then
       echo "-n $a : 字符串长度不为 0"
    else
       echo "-n $a : 字符串长度为 0"
    fi
    if [ $a ]
    then
       echo "$a : 字符串不为空"
    else
       echo "$a : 字符串为空"
    fi

    文件测试运算符

    操作符

    说明

    举例

    -b file

    检测文件是否是块设备文件,如果是,则返回true。

    [ -b $file ] 返回 false。

    -c file

    检测文件是否是字符设备文件,如果是,则返回true。

    [ -c $file ] 返回 false。

    -d file

    检测文件是否是目录,如果是,则返回 true。

    [ -d $file ] 返回 false。

    -f file

    检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回true。

    [ -f $file ] 返回 true。

    -g file

    检测文件是否设置了 SGID 位,如果是,则返回true。

    [ -g $file ] 返回 false。

    -k file

    检测文件是否设置了粘着位(Sticky Bit),如果是,则返回true。

    [ -k $file ] 返回 false。

    -p file

    检测文件是否是有名管道,如果是,则返回 true。

    [ -p $file ] 返回 false。

    -u file

    检测文件是否设置了 SUID 位,如果是,则返回 true。

    [ -u $file ] 返回 false。

    -r file

    检测文件是否可读,如果是,则返回true。

    [ -r $file ] 返回 true。

    -w file

    检测文件是否可写,如果是,则返回true。

    [ -w $file ] 返回 true。

    -x file

    检测文件是否可执行,如果是,则返回 true。

    [ -x $file ] 返回 true。

    -s file

    检测文件是否为空(文件大小是否大于0),不为空返回true。

    [ -s $file ] 返回 true。

    -e file

    检测文件(包括目录)是否存在,如果是,则返回true。

    [ -e $file ] 返回 true。

    计算器案例

    print_info(){
        printf "请输入数字:
    "               #打印一句请输入数字并换行
    }
    print_err_num(){
        printf "请输入正确的数字!
    "          #打印一句请输入正确的数字并换行
    }
    print_err_fuhao(){
    printf "请输入正确的运算符号(+ - * /):
    "   
    #打印一句请输入正确的运算符号(+ - * /):并换行
    } 
    while :
    do
        read -p "请输入第一个数字:" num1         #把你输入的数字赋值给numl
        echo $num1|grep -q '^[-]?[0-9]+$' && break || print_err_num   #如果输入的不是0-9中的一个请重新输入
    done 
    while :
    do
        read -p "请输入一个运算符(形如 :+ - * /):" ysf[ "$ysf" != "+" ]&&[ "$ysf" != "-" ]&&[ "$ysf" != "*" ]&&[ "$ysf" != "/" ] && print_err_fuhao || break      #如果输入的不是加减乘除中的一个请重新输入
    done
    while :
    do
        read -p "请输入第二个数字:" num2
        echo $num2|grep -q '^[-]?[0-9]+$' && break || print_err_num
    done
    echo "运算结果为:${num1}${ysf}${num2}=$((${num1}${ysf}${num2})) "  #输出运算结果

  • 相关阅读:
    C#读写xml文件
    XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式
    C#异步批量下载文件
    echarts的markline的使用 y轴预警线
    Bootstrap-table 增删改查
    二维数组 和 稀疏数组的相互转换 及 数据存入文件中
    Bootstrap-table实现动态合并相同行
    echarts 中 参数的详讲
    BootstrapTable的简单使用教程
    遍历List 中 Map 的值
  • 原文地址:https://www.cnblogs.com/djlsunshine/p/9879976.html
Copyright © 2020-2023  润新知