zoukankan      html  css  js  c++  java
  • shell if判断语句

    条件判断if
    
    本章课程大纲
    	- 1.什么是if
    	- 2.为什么要使用if
    	- 3.if基础语法
    		- 单条件
    		- 双条件
    		- 多条件
    	- 4.基于文件进行判断
    	- 5.基于整数进行判断    重要!
    	- 6.基于字符进行判断
    	- 7.基于正则进行判断
    	- 8.基于逻辑或   && ||  -a -o
    --------------------------------------------------------------------
    
    if 仅仅只是用来判断的, 基于条件来进行判断
    	整数
    	字符
    	正则
    	....
    
    需求1:根据输入一个用户名称,   read  $1   <--test
    	1.判断输入的用户是否存在当前系统,
    	2.如不在再次判断用户是否在/home下拥有家目录
    	3.如果都没有则提示不存在。
    	
    if grep $1 /etc/passwd &>/dev/null;then
    	echo "$1 用户存在系统中...."
    elif ls -ld /home/$1 &>/dev/null;then
    	echo "$1 用户不存在系统中,但拥有家目录"
    else
    	echo "$1 用户不存在系统,也没有家目录"
    fi
    ----------------------------------------------
    grep_user=$(grep $1 /etc/passwd &>/dev/null)
    grep_rc=$?
    cat_home=$(ls -ld /home/$1 &>/dev/null)
    cat_rc=$?
    
    if [ $grep_rc -eq 0 ];then
    	echo "$1 用户存在系统中...."
    elif [ $cat_rc -eq 0 ];then
    	echo "$1 用户不存在系统中,但拥有家目录"
    else
    	echo "$1 用户不存在系统,也没有家目录"
    fi
    
    
    需求2:通过脚本传入两个参数,进行整数关系比较。比如: if.sh [ 1 2 | 2 2 | 2 3 ],请使用双分支和多分支两种方式实现。
    
    if [ $1 -eq $2 ];then
    	echo "$1 = $2"
    elif [ $1 -lt $2 ];then
    	echo "$1 < $2"
    else
    	echo "$1 > $2"
    fi
    ----------------------------------------------
    if [ $1 -eq $2 ];then
    	echo " $1 = $2"
    else
    	if [ $1 -gt $2 ];then
    		echo "$1 > $2"
    	else
    		echo "$1 < $2"
    	fi
    fi
    

    文件

    基于文件的条件比对:
    	
    
    #需求1:备份mysql,手动输入你需要备份的库名称, 备份到/backup/mysql/时间/xx.sql
    	1.数据库怎么备份?
    	2.将手动执行的命令转为脚本
    	mysqldump -uroot -poldxu.com -B mysql > /backup/mysql/2019-10-29/mysql.sql
    [root@web01 if]# cat if-3.sh 
    #!/bin/bash
    #Author:               rzq
    #QQ:                  0123456789
    #Date:                2019-10-29
    #FileName:            if-3.sh
    #URL:                 https://www.jianshu.com
    #Description:         The test script
    #Copyright (C):      2019 All rights reserved
    
    
    Date=$(date +%F)
    Path="/backup/mysql/$Date"
    
    [ -d $Path ] || mkdir -p $Path
    
    mysql -uroot  -e "show databases;"
    
    read -p "请输入你需要备份的数据库名:" dbname
    
    mysqldump -uroot  -B ${dbname} > $Path/${dbname}.sql
    [root@web01 if]# bash -x if-3.sh 
    ++ date +%F
    + Date=2019-10-29
    + Path=/backup/mysql/2019-10-29
    + '[' -d /backup/mysql/2019-10-29 ']'
    + mysql -uroot -e 'show databases;'
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | test               |
    +--------------------+
    + read -p 请输入你需要备份的数据库名: dbname
    请输入你需要备份的数据库名:mysql
    + mysqldump -uroot -B mysql
    
    #需求1:备份文件至/backup/system/filename-2019-10-29,如果该目录不存在则自动创建。
    
    [root@web01 if]# cat if-10.sh
    #!/bin/bash
    #Author:               rzq
    #QQ:                  0123456789
    #Date:                2019-10-29
    #FileName:            if-10.sh
    #URL:                 https://www.jianshu.com
    #Description:         The test script
    #Copyright (C):      2019 All rights reserved
    
    
    Date=$(date +%F)
    Dest=/backup/system/
    
    read -p "请输入你要的备份的文件或目录:"  Src
    if [ ! -d $Dest ];then
    	mkdir $Dest
    fi
    cp -rpv $Src $Dest/filename-$Date
    
    [root@web01 if]# bash if-10.sh
    请输入你要的备份的文件或目录:/etc/hosts
    ‘/etc/hosts’ -> ‘/backup/system/filename-2019-10-29’
    
    
    #需求2:继需求1,判断备份的文件是否存在,如果不存在则提示”No such file or directory“,然后退出。
    [root@web01 if]# cat  if-10.sh
    #!/bin/bash
    #Author:               rzq
    #QQ:                  0123456789
    #Date:                2019-10-29
    #FileName:            if-10.sh
    #URL:                 https://www.jianshu.com
    #Description:         The test script
    #Copyright (C):      2019 All rights reserved
    
    
    Date=$(date +%F)
    Dest=/backup/system/
    
    read -p "请输入你要的备份的文件或目录:"  Src
    if [ ! -f $Src ];then
    	echo "$Src No such file or directory"
    	exit
    fi
    
    if [ ! -d $Dest ];then
    	mkdir $Dest
    fi
    cp -rpv $Src $Dest/filename-$Date
    
    [root@web01 if]# bash if-10.sh
    请输入你要的备份的文件或目录:/etc/host
    /etc/host No such file or directory
    
    #需求3:继需求1、2,判断备份的文件是否为空,如果为空则提示"This is file empty",然后退出。
    [root@web01 if]# bash if-10.sh
    请输入你要的备份的文件或目录:/etc/op
    /etc/op This is file empty
    [root@web01 if]# cat if-10.sh
    #!/bin/bash
    #Author:               rzq
    #QQ:                  0123456789
    #Date:                2019-10-29
    #FileName:            if-10.sh
    #URL:                 https://www.jianshu.com
    #Description:         The test script
    #Copyright (C):      2019 All rights reserved
    
    
    Date=$(date +%F)
    Dest=/backup/system/
    
    read -p "请输入你要的备份的文件或目录:"  Src
    
    #1.判断用户输入的路径是否存在,是否是一个文件
    if [ ! -f $Src ];then
    	echo "$Src No such file or directory"
    	exit
    fi
    
    #2.判断文件为空,则报错
    if [ ! -s $Src ];then
    	echo "$Src This is file empty"
    	exit
    fi
    
    #3.备份源没有问题,则创建备份的目录
    if [ ! -d $Dest ];then
    	mkdir $Dest
    fi
    cp -rpv $Src $Dest/filename-$Date
    
    [root@web01 if]# touch /etc/op
    [root@web01 if]# bash if-10.sh
    请输入你要的备份的文件或目录:/etc/op
    /etc/op This is file empty
    
    
    需求1:备份文件至/backup/system/filename-2019-10-29,如果该目录不存在则自动创建。
    
    需求2:继需求1,判断备份的文件是否存在,如果不存在则提示”No such file or directory“,然后退出。
    
    需求3:继需求1、2,判断备份的文件是否为空,如果为空则提示"This is file empty",然后退出。
    ------------------------------------------------------------------------------------------
    

    整数比对:

    #-eq是等于
    #-ne是不等于
    #-gt是大于
    #-lt是小于
    #-ge是大于等于
    #le是小于等于  
    
    [root@web01 if]# [ 1 -eq 1 ] && echo $?
    0
    [root@web01 if]# [ 1 -eq 2 ] && echo $?
    [root@web01 if]# [ 1 -eq 2 ] ; echo $?
    1
    [root@web01 if]# [ 1 -ge 2 ] && echo "成立" || echo "不成立"
    不成立
    [root@web01 if]# [ 1 -lt 2 ] && echo "成立" || echo "不成立"
    成立
    [root@web01 if]# [ 1 -gt 2 ] && echo "成立" || echo "不成立"
    不成立
    [root@web01 if]# [ 1 -ne 2 ] && echo "成立" || echo "不成立"
    成立
    [root@web01 if]# 
    
    
    #需求1:用户执行脚本,sh status.sh nginx,则检查nginx服务的运行状态。(仅支持传递一个参数)
    	1.检查nginx状态  systemctl status nginx
    	2.状态结果非0 则提示未启动
    	3.状态结果为0 则提示已启动
    [root@web01 if]# cat  if-5.sh
    #!/bin/bash
    #Author:               rzq
    #QQ:                  0123456789
    #Date:                2019-10-29
    #FileName:            if-5.sh
    #URL:                 https://www.jianshu.com
    #Description:         The test script
    #Copyright (C):      2019 All rights reserved
    
    #控制传递的参数为一个
    if [ $# -ne 1 ];then
    	echo "USAGE: $0 { Nginx|rsyncd|sshd|all service name }"
    	exit
    fi
    
    systemctl status $1 &>/dev/null
    rc=$?
    if [ $rc -eq 0 ];then
    	echo "$1 以启动"
    else
    	echo "$1 未启动"
    fi
     
    
    [root@web01 if]# bash if-5.sh
    USAGE: if-5.sh { Nginx|rsyncd|sshd|all service name }
    [root@web01 if]# bash if-5.sh nginx
    nginx 以启动
    [root@web01 if]# bash if-5.sh rsyncd
    rsyncd 未启动
    [root@web01 if]# bash if-5.sh rsyncd nginx
    USAGE: if-5.sh { Nginx|rsyncd|sshd|all service name }
    
    --------------------------------------------------------------------
    #需求2:查看磁盘/当前使用状态,如果使用率超过80%则报警发邮件
    [root@web01 if]# cat if-4.sh
    #!/bin/bash
    #Author:               rzq
    #QQ:                  0123456789
    #Date:                2019-10-29
    #FileName:            if-4.sh
    #URL:                 https://www.jianshu.com
    #Description:         The test script
    #Copyright (C):      2019 All rights reserved
    
    
    disk_use=$( df -h|awk '//$/ {print $(NF-1)}' )
    if [ ${disk_use%\%} -ge 5 ];then
    	echo "邮件报警中..."
    	sleep 3
    	echo "邮件已发送,你的磁盘使用率是 $disk_use"
    fi
    
    [root@web01 if]# bash if-4.sh
    邮件报警中...
    邮件已发送,你的磁盘使用率是 7%
    ---------------------------------------------------------
    #需求1:单分支,判断当前用户是不是root,如果不是那么返回“ERROR”
    [root@web01 if]# echo $(whoami)
    root
    [root@web01 if]# echo $USER
    root
    [root@web01 if]# echo $UID
    0
    [root@web01 if]# cat if-6.sh
    #!/bin/bash
    #Author:               rzq
    #QQ:                  0123456789
    #Date:                2019-10-29
    #FileName:            if-6.sh
    #URL:                 https://www.jianshu.com
    #Description:         The test script
    #Copyright (C):      2019 All rights reserved
    
    if [ $UID != 0 ];then
    	echo "ERROR"
    fi
    
    [root@web01 opt]# su - op
    [op@web01 ~]$ ls
    [op@web01 ~]$ cd /opt
    [op@web01 opt]$ ;s
    -bash: syntax error near unexpected token `;'
    [op@web01 opt]$ ls
    if-6.sh  rpm
    [op@web01 opt]$ bash if-6.sh
    ERROR
    
    [root@web01 if]# cat if-7.sh 
    #!/bin/bash
    
    if [ $USER != "root" ];then
    	echo "ERROR"
    fi
    
    [op@web01 opt]$ bash if-7.sh 
    ERROR
    
    [root@web01 if]# cat if-8.sh 
    #!/bin/bash
    if [ $(whoami) != "root" ];then
    	echo "ERROR"
    fi
    [root@web01 if]# cp ./if-8.sh /opt
    
    [op@web01 opt]$ bash if-8.sh 
    ERROR
    ---------------------------------------------------------------------
    #需求2:双分支,判断当前登录用户是管理员还是普通用户,如果是管理员输出”hey admin“ 如果是普通用户输出”hey guest“
    [root@web01 if]# cat if-9.sh 
    #!/bin/bash
    #Author:               rzq
    #QQ:                  0123456789
    #Date:                2019-10-29
    #FileName:            if-9.sh
    #URL:                 https://www.jianshu.com
    #Description:         The test script
    #Copyright (C):      2019 All rights reserved
    
    if [ $UID -eq 0 ];then
    	echo "hey admin"
    else
    	echo "hey guest"
    fi
    
    [root@web01 if]# cp ./if-9.sh /opt/
    [op@web01 opt]$ bash if-9.sh 
    hey guest
    

    字符

    #需求2:使用 read编写一个备份脚本,需要用户传递2个参数,源和目标。
    
    [root@web01 shell]# cat var19.sh
    #!/bin/bash
    #Author:               rzq
    #QQ:                  0123456789
    #Date:                2019-10-29
    #FileName:            var19.sh
    #URL:                 https://www.jianshu.com
    #Description:         The test script
    #Copyright (C):      2019 All rights reserved
    
    
    read -p "请输入你要备份源目标文件或目录:" Source
    read -p "请输入你要备份目标地址是哪里:"   Dest
    
    echo -e "	你要备份的源是:$Source
    	你要备份的目标是:$Dast"
    
    read -p "你确定要备份吗?[ y | n ]" Action
    
    if [ $Action == "y" ];then 
    	cp -rpv $Source $Dest
    fi
    
    
    [root@web01 shell]# bash var19.sh
    请输入你要备份源目标文件或目录:/etc/rpm
    请输入你要备份目标地址是哪里:/opt
    	你要备份的源是:/etc/rpm
    	你要备份的目标是:
    你确定要备份吗?[ y | n ]y
    ‘/etc/rpm’ -> ‘/opt/rpm’
    ‘/etc/rpm/macros.dist’ -> ‘/opt/rpm/macros.dist’
    ‘/etc/rpm/macros.perl’ -> ‘/opt/rpm/macros.perl’
    
    

    正则

    #需求1:提示学生输入自己的成绩。
    	1.如果分数大于0小于59提示补考。
    	2.如果分数大于60小于70提示良好。
    	3.如果分数大于71小于85提示好。
    	4.如果分数大于86小于100提示优秀。
    	5.不允许输入空值.
    
    [root@web01 if]# cat  if-11.sh
    #!/bin/bash
    #Author:               rzq
    #QQ:                  0123456789
    #Date:                2019-10-29
    #FileName:            if-11.sh
    #URL:                 https://www.jianshu.com
    #Description:         The test script
    #Copyright (C):      2019 All rights reserved
    
    
    
    read -p "请输入你的成绩: "  num
    
    if [ -z $num ];then
    	echo "不允许输入空值"
    	exit 1
    fi
    
    if [[ ! "$num" =~ ^[0-9]+$ ]];then
    	echo "请输入纯数字"
    	exit 2
    fi
    
    if [ $num -ge 0 -a $num -le 59 ];then
    	echo "补考"
    elif [ $num -ge 60 -a $num -le 70 ];then
    	echo "良好"
    elif [ $num -ge 71 -a $num -le 85 ];then
             echo "好"
    elif [ $num -ge 86 -a $num -le 100 ];then
             echo "优秀"
    else 
    	echo "gdx"
    fi
    
    [root@web01 if]# bash if-11.sh
    请输入你的成绩: 3t
    请输入纯数字
    [root@web01 if]# bash if-11.sh
    请输入你的成绩: 
    不允许输入空值
    [root@web01 if]# bash if-11.sh
    请输入你的成绩: 89
    优秀
    [root@web01 if]# bash if-11.sh
    请输入你的成绩: 123
    gdx
    
    
    
    
    #需求2:使用for循环打印一推单词,然后仅输出以r开头的单词。
    [root@web01 if]# cat if-12.sh
    #!/bin/bash
    #Author:               rzq
    #QQ:                  0123456789
    #Date:                2019-10-30
    #FileName:            if-12.sh
    #URL:                 https://www.jianshu.com
    #Description:         The test script
    #Copyright (C):      2019 All rights reserved
    
    
    for var in ad boi ren rip op
    do
    if [[ "$var" =~ ^r ]];then
    echo $var
    fi
    done
    
    [root@web01 if]# bash if-12.sh
    ren
    rip
    --------------------------------------------------------
    #需求3:编写一个创建用户的脚本。
    	1.提示用户输入要创建用户的前缀,必须是英文。  oldboy
    	2.提示用户输入后缀,必须是数字。			  123
    	3.如果前缀和后缀都没有问题,则进行用户创建。
    
    	oldboy123     ok!!!
    
    [root@web01 if]# cat if-13.sh 
    #!/bin/bash
    #Author:               rzq
    #QQ:                  0123456789
    #Date:                2019-10-30
    #FileName:            if-13.sh
    #URL:                 https://www.jianshu.com
    #Description:         The test script
    #Copyright (C):      2019 All rights reserved
    
    
    read -p "请输入你创建用户的前缀:"  qz
    if [[ ! "$qz" =~ ^[a-Z]+$ ]];then
    	echo "请输入纯英文"
    	exit 1
    fi
    
    read -p "请输入你创建用户的后缀:"  hz
    
    if [[ ! "$hz" =~ ^[0-9]+$ ]];then
    	echo "请输入纯数字"
    	exit 2
    fi
    
    user_name=$qz$hz
    id $user_name &> /dev/null
    if [ $? -eq 0 ];then
    	echo "用户已存在"
    	exit 3
    else
    useradd $user_name
    echo "用户已创建成功"
    
    fi
    
    [root@web01 if]# bash if-13.sh 
    请输入你创建用户的前缀:ren1
    请输入纯英文
    [root@web01 if]# bash if-13.sh 
    请输入你创建用户的前缀:rzq
    请输入你创建用户的后缀:123e
    请输入纯数字
    [root@web01 if]# bash if-13.sh 
    请输入你创建用户的前缀:rzq
    请输入你创建用户的后缀:123
    用户已创建成功
    [root@web01 if]# bash if-13.sh 
    请输入你创建用户的前缀:rzq
    请输入你创建用户的后缀:123
    用户已存在
    
    
    

    总结

    今日总结:
    	1.if判断
    		真
    		假
    	2.if语法
    		单分支
    		双分支
    		多分支
    	3.if在判断的过程中,需要表达式
    		1.基于文件的方式判断				-d -f -s -e    三个需求
    		2.基于整数的方式判断				-eq -ne -ge -gt -le -lt
    		3.基于字符串方式判断				= !=
    		4.基于正则表达式方式判断			=~   ^[0-9]+$  ^[a-z]+$ ^[A-Z]+$ ^[a-Z]+$
    
    
  • 相关阅读:
    表的转置 行转列: DECODE(Oracle) 和 CASE WHEN 的异同点
    Sql中EXISTS与IN的使用及效率
    Oracle学习之start with...connect by子句的用法
    Java复制、移动和删除文件
    简单的实现微信获取openid
    SQL语句中LEFT JOIN、JOIN、INNER JOIN、RIGHT JOIN的区别?
    java 基础最全网站
    SpringBoot(十一)过滤器和拦截器
    做项目遇到的问题集锦
    使用Java实现二叉树的添加,删除,获取以及遍历
  • 原文地址:https://www.cnblogs.com/baozexu/p/11762750.html
Copyright © 2011-2022 走看看