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
  • 相关阅读:
    闭包函数与装饰器
    函数的嵌套,名称空间以及作用域
    函数知识点整理
    文件处理,光标
    ☆Django☆---表的设计 生命周期 分组 解析 路由层 视图层
    ☆Django☆---注册功能
    ☆Django☆---初步学习
    ☆Django☆---学习Django前的了解 wsgiref jinja2
    ☆javaSctipt☆---基础学习
    ☆前端☆---博客园作业
  • 原文地址:https://www.cnblogs.com/weiwenbo/p/6701623.html
Copyright © 2011-2022 走看看