• ②shell流程控制语句if


    1.单分支结构

    #!/bin/bash
    which ls
    if [ $? = 0 ];then
       echo ok
    fi
    

    2.双分支结构

    #!/bin/bash
    if grep -qs "CentOS" /etc/os-release;then
       echo "OS is centos"
    else
       echo "OS not centos"
    fi   
    

    双分支套双分支

    #!/bin/bash
    if [ $EUID -eq 0 ];then
    	if [ -f /var/log/message ];then
    		tail -n 100  /var/log/message >/var/log/message_bak
    		cat /var/log/message_bak>/var/log/message
    	         echo "is ok" && exit
    	else
    		 echo '/var/log/message not exiting'
    	fi
    else 
        echo "USER IS NOT root"
         exit
    fi
    

    3.多分支结构

    if [ 有房 ];then
       嫁
    elif [ 有车 ];then
       嫁
    elif [ 有钱 ];then  
       嫁
    else 
      不嫁
    fi
    
    #!/bin/bash
    read -p "请输入你有多少钱: " money
    read -p "请输入你有几套房子: " houses
    
    if [ $money -ge 1000000 ]   ### ge 表示大于
      then
         echo "有钱我嫁给你"
    elif [ $houses -ge 3 ]
      then
         echo "有房我嫁给你"
    else
         echo "我考虑下"
    fi
    

    4.if语句中的文件比对

    参数 说明 示例
    -e 如果条件或目录存在则为真 -e file
    -s 如果文件存在且至少有一个字符则为真 -s file
    -d 如果文件存在且为目录则为真 -d file
    -f 如果文件存在且为普通文件则为真 -f file
    -r 如果文件存在可读则为真 -r file
    -w 如果文件存在可写则为真 -w file
    -x 如果文件存在可执行则为真 -x file
    1)-e file/dir
    #!/bin/bash
    if [ -e "$1" ];then
    echo "file is exiting"
    else
       echo "file is not exiting"
    fi
    
    也可以写成
    [root@famous-machine-1 ~]# [ -e /etc/hosts ]&& echo 'file exiting '||echo 'file no exiting'
    file exiting 
    [root@famous-machine-1 ~]# [ -e /etc/hosts11 ]&& echo 'file exiting '||echo 'file no exiting'
    file no exiting
    
    5.if整数比对
    -eq 等于则条件为真 1 -eq 1
    -ne 不等于则条件为真 1 -ne 2
    -gt 大于则条件为真 2 -gt 1
    -ge 大于或等于则条件为真 2 -ge 2
    -lt 小于则条件为真 1 -lt 2
    -le 小于等于则条件为真 1 -le 1
    < 小于(需要双括号) 如:((“ a " < " a" < " a"<"b”))
    <= 小于等于(需要双括号) 如:((“ a " < = " a" <= " a"<="b”))
    1)查找服务是否运行的脚本
    #!/bin/bash
    if [ $# -ne 1 ];then
      echo "请输入一个参数!" && exit
    fi
    
    systemctl status $1 >>/dev/null
    if [ $? -eq 0 ];then
      echo "$1 server is running!"
    else
      echo "$1 server no running!"
    fi
    

    2)磁盘使用率超过80%报警

    cat test.sh 
    #!/bin/bash
    Disk_Use=$(df -h|grep /$ |awk '{print $5}')
    if [ ${Disk_Use//%} -gt 80 ];then
       echo "disk_use is gt 80%"
    else 
       echo ' disk is ok '
    fi
    

    5.if字符串比较

    参数 说明 示例
    = 等于则条件为真 [ "$a" == "$a"]
    != 不等于则条件为真 [ "$a" != "$b"]
    -z 字符串的长度为零则为真 [ -z $a ]
    -n 字符串的长度不为空则为真 [ -n "$a" ]
    str1>str2 str1大于str2为真 str1 > str2
    str1<str2 str1小于str2为真 str1 < str2

    6.多条件比对

    -a and

    [root@famous-machine-1 ~]# [ 1 -eq 1 -a 1 -ne 2 ]&& echo $?   #两个条件都必须满足
    0
    
    root@rongbiz-Super-Server:~# cat test.sh 
    #!/bin/bash
    read -p "请输入考试成绩: " cj
    if [ $cj -ge 0 -a $cj -lt 60 ];then
    	echo "补考!"
    elif [ $cj -ge 60 -a $cj -lt 80 ];then
    	echo "合格!"
    elif [ $cj -ge 80 -a $cj -le 100 ];then
    	echo "优秀"
    else 
    	echo "请输入合规数字!"
    fi
    

    -o or

    [root@famous-machine-1 ~]# [ 1 -eq 1 -o 2 -ne 2 ]&& echo $?   #两个条件满足一个就行
    0
    

    6.if正则比对

    必须 [[]]

    #!/bin/bash
    read -p "请输入考试成绩: " cj
    if [[ ${cj} =~ ^[0-9]+$ ]];then
          echo "$cj"  
    else 
    	  echo "input error"
    fi
    

    1)添加一个用户 名称开通必须是英文字符串 后缀必须是数字 例如:yangtao416

    #!/bin/bash
    read -p "请输入一个前缀: " cj
    if [[ ! $cj =~ ^[a-Z]+$ ]];then
         echo "输入错误!" && exit
    fi
    
    read -p "请输入一个数字后缀: " num
    if [[ $num =~ ^[0-9]+$ ]];then
    	id ${cj}${num}
    	if [ $? -ne 0 ];then
    	         useradd ${cj}${num}
    	         echo "create user ${cj}${num} OK"
            else
    	         echo " ${cj}${num}  is exiting"
    	         exit
           fi
    fi
    
  • 相关阅读:
    操作系统概论——引
    Oracle知识点总结(一)
    SQLite操作
    JUnit单元测试(六)--Eclipse中JUnit的使用
    IOS沙盒和sqlite简单操作分析
    Android 程序清单文件详解
    限制对比度自适应直方图均衡化算法原理、实现及效果
    第一个django项目
    mysql 引擎优化
    项目
  • 原文地址:https://www.cnblogs.com/yangtao416/p/14798331.html
Copyright © 2020-2023  润新知