zoukankan      html  css  js  c++  java
  • shell 条件测试

    格式1:test 条件表达式

    格式2:[条件表达式]

    格式3:[[条件表达式]]

    man test

    [root@localhost ~]# test -d /home
    [root@localhost ~]# echo $?
    0
    [root@localhost ~]# [ -d /home ]
    [root@localhost ~]# echo $?
    0
    [root@localhost ~]# test -d /home111
    [root@localhost ~]# echo $?
    1
    [root@localhost ~]# [ -d /home ];echo $?
    0
    [root@localhost ~]# [[ -d /home ]];echo $?   #2个括号支持正则表达式
    0
    [root@localhost ~]# [[[ -d /home ]]];echo $?
    -bash: [[[: command not found
    127

    [ -e dir|file ]

    [ -d dir ]

    [ -f file ]

    [ -r file ] 当前用户对该文件是否有读权限

    [ -x file ]当前用户对该文件是否有执行权限

    [root@localhost ~]# [ -e /home ];echo $?
    0
    [root@localhost ~]# [ -f /home ];echo $?
    1
    [root@localhost ~]# [ -f /etc/passwd ];echo $?
    0
    [root@localhost ~]# touch /file1
    [root@localhost ~]# chmod u+x /file1 
    [root@localhost ~]# ll /file1
    -rwxr--r-- 1 root root 0 Jan  4 14:32 /file1
    [root@localhost ~]# [ -x file1 ];echo $?
    1
    [root@localhost ~]# su - wwb
    [wwb@localhost ~]$ [ -x /file1 ];echo $?
    1
    [wwb@localhost ~]$ [ -L /etc/passwd ]; echo $?
    1
    [wwb@localhost ~]$ [ ! -L /etc/passwd ]; echo $?
    0
    #!/usr/bin/env bash
    
    for ip in `cat $1`
    do
            ping -c1 $ip &>/dev/null
            if [ $? -eq 0 ]; then
                    echo "$ip is up"
            else
                    echo "$ip is down"
            fi
    done

    不同的错误定义不同的返回值

    [root@localhost ~]# cat ping03.sh 
    #!/usr/bin/env bash
    
    if [ $# -eq 0 ];then
        echo "usage:`basename $0` file"
        exit 1
    fi
    
    if [ ! -f $1 ];then    
        echo "error please use file"
        exit 2
    fi
    
    for ip in `cat $1`
    do
        ping -c1 $ip &>/dev/null
        if [ $? -eq 0 ];then
            echo "$ip:up"
        else
            echo "$ip:down"
        fi
    done

     数值比较[ 整数1 操作符 整数2 ]

    [ 1 -gt 10 ]:大于

    [ 1 -lt 10  ] :小于

    [ 1 -eq 10 ]:等于

    [ 1 -ne 10 ]:不等于

    [ 1 -ge 10 ]:大于等于

    [ 1 -le 10  ]:小于等于

    [root@localhost ~]# disk_use=`df -Ph | grep '/$'| awk '{print $5}' |awk -F'%' '{print $1}'`
    [root@localhost ~]# [ $disk_use -gt 60 ]&&echo "warning.."
    [root@localhost ~]# [ $disk_use -gt 30 ]&&echo "warning.."
    warning..
    [root@localhost ~]# [ $uid -eq 0 ] && echo "The current user is the super user" || echo "The current user is not super user"
    The current user is the super user

    磁盘使用率

    #!/usr/bin/env bash
    #disk use
    #v1.0
    
    #disk_use=`df -Ph | grep /$ | awk '{print $5}'|awk -F'%' '{print $1}'`
    #disk_name=`df -Ph | grep /$ | awk '{print $6}'`
    IFS=$'
    '  #for默认空格最为换行改成回车作为换行
    for  line in  `df -Ph|grep -v Size`
    do
            {
            disk_use=`echo $line|awk '{print $5}'|awk -F'%' '{print $1}'`
            disk_name=`echo $line| awk '{print $6}'`
    
            if [ $disk_use -gt 0 ];then
                    echo "`date +%F` $disk_name: ${disk_use}%"
            fi
            }
    
    done
    #!/usr/bin/env bash
    #mem use
    #v1.0 by wwb
    
    mem_total=`free -m | grep Mem | awk '{print $2}'`
    mem_used=`free -m | grep Mem | awk '{print $3}'`
    mem_per=$((mem_used*100/mem_total))
    
    war_mem_file=/tmp/war_mem.txt
    
    if [ $mem_per -gt 80 ];then
            echo "`date +%F-%M` memory:${mem_per}%" |tee $war_mem_file
    fi
    
    if [ -f $war_mem_file ];then
            mail -s "mem warning" root <$war_mem_file
            rm -rf $war_mem_file
    fi

    字符串比较

    提示:使用双引号

    [root@localhost ~]# [ "$USER" = "root" ];echo $?
    0
    [root@localhost ~]# [ "$USER" = "wwb" ];echo $?
    1
    [root@localhost ~]# [ "$USER" =~ ^ro ];echo $?
    -bash: [: =~: binary operator expected
    2
    [root@localhost ~]# [[ "$USER" =~ ^ro ]];echo $?
    0
    [root@localhost ~]# ./useradd.sh 
    Please input number0k
    error number
    [root@localhost ~]# ./useradd.sh 
    Please input number10
    Please input prefix:wwb
    wwb1 create ok
    wwb2 create ok
    wwb3 create ok
    wwb4 create ok
    wwb5 create ok
    wwb6 create ok
    wwb7 create ok
    wwb8 create ok
    wwb9 create ok
    wwb10 create ok
    [root@localhost ~]# cat useradd.sh 
    #!/usr/bin/env bash
    #useradd
    #v1.0 by wwb 14/4/2017
    
    read -p "Please input number" num
    if [[ ! $num =~ ^[0-9]+$ ]];then
        echo "error number"
        exit 1
    fi
    
    read -p "Please input prefix:" prefix
    
    for i in `seq $num`
    do
        user=${prefix}${i}
        useradd $user
        if [ $? -eq 0 ];then
            echo "$user create ok"
        fi
    done
  • 相关阅读:
    Could not determine which “make” command to run. Check the “make” step in the build configuration
    crontab定时任务不执行的原因
    Linux 设置定时任务crontab命令
    Runtime.getRuntime.exec()执行linux脚本导致程序卡死问题
    Java并发编程:volatile关键字解析
    什么是ClassLoader
    GeoJson格式与转换(shapefile)Geotools
    Docker图形化工具——Portainer
    Docker安装mysql、nginx、redis、tomcat
    Docker中nginx+tomcat实现负载均衡
  • 原文地址:https://www.cnblogs.com/weiwenbo/p/6701623.html
Copyright © 2011-2022 走看看