zoukankan      html  css  js  c++  java
  • shell脚本进阶

       接着上篇博客,今天整理一下关于条件测试和条件语句方面的知识。

    一、shell脚本进阶之条件测试

       在编写shell脚本时,经常需要对一些条件进行判断,可以使用测试命令test辅助完成测试过程。test命令测试特定的表达式是否成立,当条件成立时,命令执行后的返回值为0,否则为其他数值。
    条件测试的基本格式有:

    格式1
    test EXPRESSION
    格式2
    [ EXPRESSION ]  
    注意:使用方括号时,条件两边必须加上空格。
    

    常见的测试类型有

    • 文件测试
    • 数值测试
    • 字符串测试
    • 组合测试

    文件测试

    文件存在性及类别测试

    -a FILE:同-e
    -e FILE: 文件存在性测试,存在为真,否则为假
    -b FILE:是否存在且为块设备文件
    -c FILE:是否存在且为字符设备文件
    -d FILE:是否存在且为目录文件
    -f FILE:是否存在且为普通文件
    -h FILE 或 -L FILE:存在且为符号链接文件
    -p FILE:是否存在且为命名管道文件
    -S FILE:是否存在且为套接字文件
    
    

    文件权限测试

    -r FILE:是否存在且可读
    -w FILE: 是否存在且可写
    -x FILE: 是否存在且可执行
    -u FILE:是否存在且拥有suid权限
    -g FILE:是否存在且拥有sgid权限
    -k FILE:是否存在且拥有sticky权限
    
    

    文件属性测试

    s FILE: 是否存在且非空
    -t fd: fd表示文件描述符是否已经打开且与某终端相关
    -N FILE:文件自动上一次被读取之后是否被修改过
    -O FILE:当前有效用户是否为文件属主
    -G FILE:当前有效用户是否为文件属组
    FILE1 -ef FILE2: FILE1与FILE2是否指向同一个设备上的相同inode
    FILE1 -nt FILE2: FILE1是否新于FILE2(mtime)
    FILE1 -ot FILE2: FILE1是否旧于FILE2
    
    

    数值测试

    -gt 是否大于
    -ge 是否大于等于
    -eq 是否等于
    -ne 是否不等于
    -lt 是否小于
    -le 是否小于等于
    
    

    字符串测试

    == 是否等于
    >   是否大于 (ascii 码)
    <   是否小于
    !=  是否不等于
    =~ 是否能够被右侧的 pattern 所匹配(一般用于[[  ]]中)
    -z  检验字符串是否为空,空为真,非空为假
    -o  与-z 相反
    
    

    组合测试

    第一种方式:
    COMMAND1 && COMMAND2 并且
    COMMAND1 || COMMAND2 或者
    ! COMMAND 非
    第二种方式:
    EXPRESSION1 -a EXPRESSION2 并且
    EXPRESSION1 -o EXPRESSION2 或者
    ! EXPRESSION 非
    
    

    二、shell脚本进阶之条件语句

       Shell有一套自己的流程控制语句,其中包括条件语句、循环语句等。

    条件选择if语句

    单分支:

    if 判断条件;then
        条件为真的分支代码
    fi
    

    示例:

    #!/bin/bash
    use=`df -hT | grep "/boot" | awk '{print $6}' | cut -d "%" -f1`
    if [ $use -gt 80 ];then
        echo "Warning!!   /boot disk is full"
    fi
    

    双分支:

    if 判断条件; then
        条件为真的分支代码
    else
        条件为假的分支代码
    f
    

    示例:

    if ping -c1 -W2 station1 &> /dev/null; then 
        echo 'Station1 is UP' 
    else
        echo 'Station1 is unexpectedly DOWN!' 
    exit 1 
    fi
    

    多分支:

    if 判断条件1; then
        条件为真的分支代码
    elif 判断条件2; then
        条件为真的分支代码
    elif 判断条件3; then
        条件为真的分支代码
    else
        以上条件都为假的分支代码
    fi
    

    示例:

    #!/bin/sh
    scores=40
    if [[ $scores -gt 90 ]]; then
        echo "very good!"
    elif [[ $scores -gt 80 ]]; then
        echo "good!"
    elif [[ $scores -gt 60 ]]; then
        echo "pass!"
    else
        echo "no pass!"
    fi
    

    条件判断case语句

    case 变量引用 in
    PAT1)
        分支1
        ;;
    PAT2)
        分支2
        ;;
    ...
    *)
        默认分支
        ;;
    esac
    

    示例:

    #!/bin/sh 
    case $1 in
    start | begin)
        echo "start something"  
        ;;
    stop | end)
        echo "stop something"  
        ;;
    *)
        echo "Ignorant"  
        ;;
    esac
    

       今天的博客就到这里,下次继续整理shell脚本的知识。

  • 相关阅读:
    分别用Excel和python进行日期格式转换成时间戳格式
    数据分析之数据质量分析和数据特征分析
    BP neural network optimized by PSO algorithm on Ammunition storage reliability prediction 阅读笔记
    Matlab的BP神经网络工具箱及其在函数逼近中的应用
    js 深拷贝+浅拷贝
    git fork了项目之后修改再push给项目
    微信小程序的开发学习(2)
    Django学习
    小程序的开发学习
    JavaScript-闭包理解
  • 原文地址:https://www.cnblogs.com/flylinux/p/7576904.html
Copyright © 2011-2022 走看看