day57-shell
1.什么是if
if就是模仿人类的判断来进行的,但它没有人类那么有情感,只有True和False这两种结果。
2.为什么要使用if
当我们在写程序的时候,经常需要对上-步的执行结果进行判断。那么就需要使用f.
if语句在我们程序中就是用来做判断的,以后大家不管学习什么语言,以后只要涉及到判断的部
分,大家就可以直接拿f来使用,不同的语言之间的if只是语法不同,原理是相同的。
3.if基础语法
- 单条件
if [ $1 -eq $2 ];then
echo "ok"
fi
- 双条件
if [ $1 -eq $2 ];then
echo "OK!"
else
echo "error!"
fi
- 多条件
案例一:根据用户输入的用户名称进行以下判断:
根据输入的用户判断系统中是否存在当前用户
如果不存在再次判断是否存在家目录
如果没有则提示该用户不存在
[root@manager-61 ~/if-test]#cat if01.sh
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if01.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
read -p "请输入用户名: " Na
if grep ${Na} /etc/passwd;then
echo "当前用户已存在"
elif ls -ld /home/${Na};then
echo "当前用户存在一个家目录: ${Na}"
else
echo "不存在"
fi
----------------------------------------------------------------
[root@manager-61 ~/if-test]#cat if01.sh
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if01.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
#read -p "请输入用户名: " Na
#if grep ${Na} /etc/passwd;then
#echo "当前用户已存在"
#elif ls -ld /home/${Na};then
#echo "当前用户存在一个家目录: ${Na}"
#else
#echo "不存在"
#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
案例二: 通过脚本传入两个参数,进行比较大小.
[root@manager-61 ~/if-test]#cat if02.sh
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if02.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
if [ $1 -eq $2 ];then
echo "$1=$2"
elif [ $1 -gt $2 ];then
echo "$1>$2"
else
echo "$1<$2"
fi
-----------------------------------------------------------------------
[root@manager-61 ~/if-test]#cat if02.sh
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if02.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
#if [ $1 -eq $2 ];then
#echo "$1=$2"
#elif [ $1 -gt $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
4.基于文件的判断
#基于文件的判断的两种书写方式
[root@manager-61 ~/if-test]#cat if03.sh
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if03.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
read -p "请输入需要备份的文件或目录: " Src
read -p "请输入备份的目标位置: " Dest
[ -d ${Dest} ] || mkdir -p ${Dest}
cp -a ${Src} ${Dest}
#if [ ! -d ${Dest} ];then
#mkdir -p ${Dest}
#fi
案例一:备份数据库mysql,通过传参的方式输入你需要备份的库名称,备份到/backup/mysql/时间/xx.sql
#1.数据库手动备份
#mysqldump -uroot -poldxu.com -B mysql > /backup/mysql/2019-10-29/mysql.sql
#2.脚本实现数据库备份
[root@manager-61 ~/if-test]#cat if04.sh
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if04.sh
#URL: https://www.leitiancheng.cn
#Description: 交互式备份数据库
#*********************
#1.变量定义
Dest=$(date +%F)
Path=/backup/mysql/${Dest}
#2.判断是否存在备份目标位置,不存在则创建
[ -d ${Path} ] || mkdir -p ${Path}
#3.执行备份数据库的命令
mysqldump -uroot -poldxu.com -B mysql >$Path/mysql.sql
案例二:备份数据库mysql,通过交互式输入你需要备份的库名称,备份到/backup/mysql/时间/xx.sql
[root@manager-61 ~/if-test]#cat if05.sh
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if04.sh
#URL: https://www.leitiancheng.cn
#Description: 交互式备份数据库
#*********************
#1.变量定义
Dest=$(date +%F)
Path=/backup/mysql/${Dest}
#2.判断是否存在备份目标位置,不存在则创建
[ -d ${Path} ] || mkdir -p ${Path}
#3.展示数据库中的信息
mysql -uroot -poldxu.com -e "show databases;"
read -p "请输入需要备份的库名: " dbname
#4.执行备份数据库的命令
mysqldump -uroot -poldxu.com -B ${dbname} >$Path/${dbname}.sql
5.基于整数进行判断
案例一:用户执行脚本,检查nginx状态.仅支持传递一个参数
[root@manager-61 ~/if-test]#cat if06.sh
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if06.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
if [ $# -ne 1 ];then
echo "请输入一个参数"
exit
fi
systemctl status ${Server} >/dev/null
if [ $? -eq 0 ];then
echo "${Server} 已启动"
else
echo "${Server} 未启动"
fi
案例二:查看磁盘/当前的使用状态,如果使用率超过80%,则报警发邮件
[root@manager-61 ~/if-test]#cat if07.sh
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if07.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
Disk_use=$(df -h|awk '/\/$/ {print $(NF-1)}')
if [ ${Disk_use%\%} -ge 5 ];then
echo "邮件报警中..."
sleep 3
echo "邮件已发送,当前磁盘使用率为: ${Disk_use}"
fi
案例三:判断当前用户是不是root,如果不是name返回"ERROR"----单分支
[root@manager-61 ~/if-test]#cat if08.sh
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if08.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
if [ $UID -ne 0 ];then
echo "ERROR..."
fi
案例四:判断当前用户是不是root,如果是root输出hello admin!.如果不是输出hello guest!----双分支
[root@manager-61 ~/if-test]#cat if09.sh
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if08.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
if [ $UID -eq 0 ];then
echo "hello admin!"
else
echo "hello guest!"
fi
6.基于字符进行判断
案例一:判断当前用户是不是root,如果不是name返回"ERROR"----单分支
[root@manager-61 ~/if-test]#cat if08.sh
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if08.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
if [ $USER != "root" ];then
echo "ERROR..."
fi
案例二:判断当前用户是不是root,如果是root输出hello admin!.如果不是输出hello guest!
[root@manager-61 ~/if-test]#cat if09.sh
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if08.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
if [ $USER = 0 ];then
echo "hello admin!"
else
echo "hello guest!"
fi
案例三:备份filename文件至/backup/system/filename-2019-10-29,如果该目录不存在则自动窗户建
[root@manager-61 ~/if-test]#cat if10.sh
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if10.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
Date=$(date +%F)
Dest=/backup/system/
#3.输入要备份的文件
read -p "请输入要备份的文件: " File
#2.判断是否存在该目录
[ -d ${Dest} ] || mkdir -p ${Dest}
#3.拷贝文件
cp -a ${File} ${Dest}/file-${Date}
------------------------------------------------------------------
[root@manager-61 ~/if-test]#cat if10.sh
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if10.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
Date=$(date +%F)
Dest=/backup/system/
#3.输入要备份的文件
read -p "请输入要备份的文件: " File
#2.判断是否存在该目录
#[ -d ${Dest}/ ] || mkdir -p ${Dest}}
if [ ! -f ${Dest} ];then
mkdir -p ${Dest}
fi
#3.拷贝文件
cp -a ${File} ${Dest}/file-${Date}
案例四:继需求3,判断备份的文件是否存在,如果不存在则提示”No such file or directory“,然后退出。
[root@manager-61 ~/if-test]#cat if11.sh
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if10.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
Date=$(date +%F)
Dest=/backup/system/
#1.输入要备份的文件
read -p "请输入要备份的文件: " File
#2.判断备份的文件是否存在
if [ ! -f ${File} ];then
echo "$File No such File or Directory"
exit
fi
#2.判断是否存在该目录
[ -d ${Dest} ] || mkdir -p ${Dest}
#3.拷贝文件
cp -a ${File} ${Dest}/file-${Date}
案例五:继续求1,2,判断个备份的文件是否为空,如果为空则提示"This is file empty",然后退出
[root@manager-61 ~/if-test]#cat if12.sh
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if10.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
Date=$(date +%F)
Dest=/backup/system/
#1.输入要备份的文件
read -p "请输入要备份的文件: " File
#2.判断备份的文件是否存在
if [ ! -f ${File} ];then
echo "$File No such File or Directory"
exit
fi
if [ ! -s ${File} ];then
echo "The file is empty!"
exit
fi
#2.判断是否存在该目录
[ -d ${Dest}/file-${Date} ] || mkdir -p ${Dest}/file-${Date}
#3.拷贝文件
cp -a ${File} ${Dest}/file-${Date}
----------------------------------------------------------------
[root@manager-61 ~/if-test]#cat if13.sh
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if10.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
Date=$(date +%F)
Dest=/backup/system/
#1.输入要备份的文件
read -p "请输入要备份的文件: " File
#2.判断备份的文件是否存在
if [ -f ${File} ];then
if [ ! -s ${File} ];then
echo "空文件!"
exit
fi
elif [ ! -f ${File} ];then
echo "没有这个文件!"
exit
fi
#3.判断是否存在该目录
[ -d ${Dest}/file-${Date} ] || mkdir -p ${Dest}/file-${Date}
#4.拷贝文件
cp -a ${File} ${Dest}/file-${Date}
7.基于正则进行判断
案例一: 使用for循环打印一堆单词,然后仅输出以r开头的单词
[root@manager-61 ~/if-test]#cat if15.sh
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if15.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
for var in ab ac rx bx rvv vt
do
if [[ "$var" =~ ^r ]];then
echo ${var}
fi
done
案例二:编写一个脚本创建用户
提示用户输入的要创建的用户名必须是以英文字母开头的
提示用户输入的要创建的用户名必须是以数字结尾的
如果都没有问题就进行创建
[root@manager-61 ~/if-test]#cat if15.sh
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if15.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
for var in ab ac rx bx rvv vt
do
if [[ "$var" =~ ^r ]];then
echo ${var}
fi
done
[root@manager-61 ~/if-test]#cat if16.sh
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if16.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
read -p "请输入想要创建的用户名: " Username
if [[ ! "$Username" =~ ^[a-z]+ ]];then
echo "请输入以字母开头的!!!"
elif [[ ! "$Username" =~ [0-9]+$ ]];then
echo "请输入以数字结尾的!!!!"
exit
fi
id ${Username} &>/dev/null
if [ $? -eq 0 ];then
echo "用户已存在"
exit
fi
useradd ${Username} &>/dev/null
----------------------------------------------------------------
[root@manager if]# cat if-18.sh
#!/bin/bash
# Author: Oldux.com QQ: 552408925
# Date: 2019-10-29
# FileName: if-18.sh
# URL: https://www.xuliangwei.com
# Description:
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变量
user_name=$qz$hz
id $user_name &>/dev/null
if [ $? -eq 0 ];then
echo " $user_name 用户已存在"
exit 3
else
useradd $user_name
echo "$user_name 用户创建成功"
fi
8.基于逻辑或 && || -a -o
示例:
[root@manager if]# cat if-15.sh
#!/bin/bash
# Author: Oldux.com QQ: 552408925
# Date: 2019-10-29
# FileName: if-15.sh
# URL: https://www.xuliangwei.com
# Description:
read -p "请输入一个数字: " num
#判断用户输入的是否为空
if [ -z $num ];then
echo "请不要输入空值"
exit
fi
echo "你输入的数字是: $num"
1.两个条件必须都满足
[root@manager if]# [ 1 -lt 2 -a 5 -gt 10 ];echo $?
2.只要满足一个条件即可
[root@manager if]# [ 1 -lt 2 -o 5 -gt 10 ];echo $?
3.两个条件必须都满足
[root@manager if]# [ 1 -lt 2 ] && [ 5 -gt 10 ] ; echo $?
4.只要满足一个条件即可
[root@manager if]# [ 1 -lt 2 ] || [ 5 -gt 10 ] ; echo $?
案例一:提示学生输入考试成绩.
如果分数大于0小于59提示补考
如果分数大于60小于70提示良好
如果分数大于71小于85提示好
如果分数大于86小于100提示优秀
不允许输入空值
必须输入的是数字
[root@manager-61 ~/if-test]#cat if14.sh
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if14.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
read -p "请输入成绩: " cj
if [ -z ${cj} ];then
echo "请输入成绩!"
exit
fi
if [[ ! $cj =~ ^[0-9]+$ ]];then
echo "请输入纯数字!"
exit
fi
if [ ${cj} -ge 0 -a $cj -le 59 ];then
echo "补考!!!!"
fi
if [ ${cj} -ge 60 -a $cj -le 70 ];then
echo "良好!!!!"
fi
if [ ${cj} -ge 71 -a $cj -le 85 ];then
echo "好!!!!!!"
fi
if [ ${cj} -ge 86 -a $cj -le 100 ];then
echo "秀啊!!!!!"
fi
if [ ${cj} -gt 100 ];then
echo "请输入小于100的数字!!!"
fi