zoukankan      html  css  js  c++  java
  • 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 初学乍练
  • 相关阅读:
    PAT顶级 1024 Currency Exchange Centers (35分)(最小生成树)
    Codeforces 1282B2 K for the Price of One (Hard Version)
    1023 Have Fun with Numbers (20)
    1005 Spell It Right (20)
    1092 To Buy or Not to Buy (20)
    1118 Birds in Forest (25)
    1130 Infix Expression (25)
    1085 Perfect Sequence (25)
    1109 Group Photo (25)
    1073 Scientific Notation (20)
  • 原文地址:https://www.cnblogs.com/luwei0915/p/10496618.html
Copyright © 2011-2022 走看看