美文网首页
shell条件测试及If选择结构

shell条件测试及If选择结构

作者: 郭不戳 | 来源:发表于2022-09-22 07:10 被阅读0次

    1. 条件测试

    作用: 赋予脚本智能判断的效果
    文件或者目录的读/写等状态
    数值的大小
    字符串是否匹配
    多条件组合

    语法格式

    test 选项 参数 或者 [ 选项 参数 ]

    常见的测试操作

    1. 对字符串进行测试

    a=abc
    b=xyz
    
    字符串比较

    == 两边是否相等,相等时条件测试算成功

    [ $a == $b ]  //使用变量判断两个变量的值是否相等
    

    != 两边是否不等,不相等时条件测试算成功

    [ $a != $b ]   //使用变量判断两个变量的值是否不相等
    

    -z 判断变量是否为空

    [ -z $a ]  //判断变量是否为空,为空时条件测试算成功
    

    ! -z 判断变量是否非空

    [ ! -z $a ]  //判断变量是否非空,非空时条件测试算成功
    
    整数值比较

    格式: [ 字符串1 操作符 字符串2 ]

    整数值比较
    实例: 检查已经登陆的用户数,是否不超过5个
    [root@localhost ~]# who | wc -l
    2
    [root@localhost ~]#[ $(who | wc -l) -le 5 ] && echo "YES"
    YES
    

    2. 文件状态测试

    格式:[ 操作符 文件或目录 ]

    文件状态测试
    [ -e abc ]   //判断当前目录下的abc是否存在,用echo $?查结果
    [ -f /opt/abc ]   //判断opt下有没有abc这个普通文件
    [ -d /opt/abc ]  //判断opt下有没有abc这个目录
    mkdir  xyz
    [ -d /opt/xyz ]   //判断opt下有没有xyz这个目录
    [ -r /opt/abc ]   //判断当前用户对abc是否有读权限
    [ -w /opt/abc ]   //判断当前用户对abc是否有写权限
    [ -x /opt/abc ]   //判断当前用户对abc是否有x权限
    

    3. 组合多个条件

    格式: 命令1 操作符 命令2 ... 或者 [ 条件1 ] 操作符 [ 条件2 ] ...

    组合多个条件

    实例1: 当前用户为root,且位于/root目录下

    [root@localhost ~]# [ $USER == "root" ] && [ $PWD == "root" ]
    [root@localhost ~]# [ $? -eq 0 ] && echo YES
    YES
    

    实例2: 当/opt/testdir目录不存在时,创建该目录

    [root@localhost ~]# [ -d "/opt/testdir"] || madir -p /opt/testdir
    [root@localhost ~]# ls -ld /opt/testdir/
    drwxr-xr-x 2 root root 4096 09-20 12:56 /opt/testdir
    

    If选择结构

    单分支结构

    特点: 当条件成立时执行命令序列,反之不执行

    格式

    单分支结构

    案例

    需求
    判断挂载点目录/mnt/dvd是否存在,若不存在则创建
    代码实现

    #! /bin/bash
    mount_dir=/mnt/dvd
    if [ !-d $mount_dir ]
    then
        mkdir -p $mount_dir
    fi
    

    双分支结构

    特点: 当条件成立时执行命令序列1,否则执行命令序列2

    格式

    双分支结构

    案例

    需求

    1. 检测并判断指定的主机是否可以ping通
    2. 目标主机的地址以位置参数提供
      代码实现
    #! /bin/bash
    ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
    if [ $? -eq 0 ]; then
        echo "Host $1 is up"
    else
        echo "Host $1 is down"
    fi
    

    多分支结构

    特点: 相当于if语句嵌套,针对多个条件分别执行不同的操作

    格式

    多分支结构

    案例

    需求

    1. 输入一个分数, 判断成绩分档
    2. 85~100 优秀, 70~84 良好,低于70分不及格
      代码实现
    #! /bin/bash
    read -p "请输入分数(0-100):"FS
    if [ $FS -ge 85 ] && [ $FS -le 100 ];then
        echo "$FS分!优秀"
    elif [ $FS -ge 70 ] && [ $FS -le 84 ];then
        echo "$FS分!合格"
    else
        echo "$FS分!不合格"
    fi
    

    相关文章

      网友评论

          本文标题:shell条件测试及If选择结构

          本文链接:https://www.haomeiwen.com/subject/mahiortx.html