• Shell 02 数据运算/条件测试


    一.整数运算工具
    1.使用expr命令(运算两边必须有空格,引用变量时必须加$符号)
    [root@svr5 ~]# x=10    //定义变量x
    expr $x + 10      20      //加   (每个之间都要空格)
    expr $x - 10      0       //减
    expr $x * 10     100     //乘
    expr $x / 10      1       //除 (仅保留整数结果)
    expr $x % 10      0       //求模
     
    2.使用$[]或$(())表达式
    乘法操作*无需转义,运算符两侧可以无空格;引用变量可省略 $ 符号;计算结果替换表达式本身,可结合echo命令输出。同样对于变量x=10:
    [root@svr5 ~]# x=10    //定义变量x
    echo $[x+10]       20
    echo $[x-10]       0
    echo $[x*10]       100
    echo $[x/10]       1
    echo $((x%10))     0
     
    3.使用let命令(更改变量的值)
    [root@svr5 ~]# x=10    //定义变量x
    let y=x+10; echo $y=20
    let x++;    echo $x=11
    let x--;    echo $x=10
    let x+=10;  echo $x=20
    let x-=10;  echo $x=10
    let x*=10;  echo $x=100
    let x/=10;  echo $x=10
    let x%=10;  echo $x=0
     
    二.小数运算工具
    1.bc进入交互环境计算加减乘除
    2.bc非交互式运算
    echo 'scale=4;12.345+67.891011' | bc
    echo 'scale=2;12.34-56.78' | bc
    echo 'scale=3;12.345*56.789' | bc
    echo 'scale=1;12.345/56.789' |bc
    小数的比较: >  >=  <  <= =  !=
     
    三.条件测试
    1.比较两个字符串是否相同
    [ $USRE == "root" ];echo $?  0 (root用户)
    [ $USER == "zhangsan" ];echo $? 非0 (root用户)
    2.比较两个字符串是否不同
    root下:[ $USER != "root" ];echo $?    1
    非root:[ $USER != "root" ];echo $?  0
    3.一条执行多条命令的情况
    A && B :A成功,才执行B命令
    A || B :A失败,才执行B命令
    A;B    :依次执行,互不影响
    A && B || C :如果A则B否则C
    4.字符串的值为空/不为空
    [ -z "" ] [ -n "str" ]
    var1="str";var2=""
    [ -z "$var1" ] && echo "为空" || echo "不为空"
    [ -n "$var2" ] && echo "不为空" || echo "为空"
    [ -! -z "$var2" ] && echo "不为空" || echo "为空"
    5.整数值的比较
    -eq 是否相等          (equal)
    -ne 是否不相等        (not equle)
    -gt 是否大于          (greater than)
    -ge 是否大于等于      (greater or equal)
    -lt 小于              (lesser than)
    -le 小于等于          (lesser equal)
    [root@svr5 ~]# x=20   
    [ $x -le 10 ] && echo "小于或等于" || echo "大于"   ---大于
    提取当前登陆用户数,判断是否大于3
    n=$(who | wc -l);[ $n -ge 3 ] && ehco "大于等于3" ||  echo "小于3"
    简化:[ $(who | wc -l) -ge 3 ] $$ echo "大于等于3" || echo "小于3"
    6.识别文件/目录的状态
    1> -e 判断是否存在,不管是目录还是文件
    [ -e "/zhangsan/" ] && echo "存在" || echo "不存在" 
    2> -d 判断对象是否为目录(存在且是目录)
    [ -d "/opt/" ] && echo "是目录" || echo "不是目录"
    [ -d "/opt/1.txt/" ] && echo "是目录" || echo "不是目录"
    3> -f 对象是否是文件(存在且是文件)
    4> -r 判断对象是否可读(文件,非root用户)
    5> -w 判断对象是否可写(文件,非root用户)
    6> -x 判断对象是否可执行
    7.复合逻辑判断
    1> 逻辑与 && 都成立为真
    [root@svr5 ~]# x=10  //设置x变量的值为10
    [ $x -ge 5 ] && [ $USER == "root" ] && echo "true" || echo "false"
    2> 逻辑或 || 有一个真则为真
    [ $x -ge 30 ] || [ $USER == "zhangsan" ] && echo "true" || echo "false"
    [ $x -ge 10 ] || [ $USER == "zhangsan" ] && echo "true" || echo "false"
    四.if选择结构
    编写三个脚本:
       检测/media/cdrom目录,若不存在则创建
       检测并判断指定的主机是否可ping通
       从键盘读取一个论坛积分,判断论坛用户等级,等级分类如下:
              大于等于90 神功绝世
              大于等于80,小于90 登峰造极
              大于等于70,小于80 炉火纯青
              大于等于60,小于70 略有小成
              小于60 初学乍练
  • 相关阅读:
    低功耗蓝牙(BLE)——概念
    低功耗蓝牙(BLE)——概述
    190923——我目前的居所
    190922——真随笔
    行业——5G
    190901——无题
    190831——关于坚持
    190828-对话体
    190827——两种人
    190826-快乐
  • 原文地址:https://www.cnblogs.com/luwei0915/p/10496618.html
Copyright © 2020-2023  润新知