一、if基本介绍

1.介绍if
  • 什么是if
    判断,if是模仿⼈类的判断来进⾏的,true、false两种结果。
2.if基础语法
  • 单条件
# 伪代码
if [ 如果你有房 ];then 那么我就嫁给你
fi

if [ $1 -eq $2 ];then 	#如果$1等于$2 那么输出ok
	echo "ok"
fi
  • 双条件
#伪代码

if [ 如果你有房 ];then
那么就嫁		#true 真 条件成⽴
else
再⻅			#false 假 条件不成⽴
fi

if [ $1 -eq $2 ];then
	echo "ok"			#如果$1等于$2 那么输出ok
else
	echo "Error"		#如果$1不等于$2 那么输出error
fi
  • 多条件
#伪代码
if [ 如果你有房 ];then
就嫁
elif [ 如果你有⻋ ];then
	就嫁
elif [ 如果有钱 ];then
就嫁
else
	GG
fi
  • 1.单分支,判断当前用户是不是root执行,如果不是那么返回“ERROR”
#!/bin/bash
#********************************************************************
#Author:               xu
#QQ:                  779115590
#Date:                2020-06-03
#FileName:            if-03.sh
#Description:         The test script
#********************************************************************
if [ $USER != "root" ];then
	echo "ERROR!"
	exit
fi
  • 2.双分⽀,判断当前登录⽤户是管理员还是普通⽤户,如果是管理员输出”hey admin“ 如果是普通⽤ 户输出”hey guest
#!/bin/bash
#********************************************************************
#Author:               xu
#QQ:                  779115590
#Date:                2020-06-03
#FileName:            if-04.sh
#Description:         The test script
#********************************************************************

if [ $USER == "root" ];then
	echo "hey admin"
else
	echo "hey guest"
fi
  • 3.多分⽀,根据输⼊⼀个⽤户名称,判断输⼊的⽤户是否存在当前系统,如不存在则再次判断⽤户 是否在/home下拥有家⽬录,如果都没有则提示不存在。
1.read 提示⽤户交互,然后输⼊⼀个⽤户名称,这个输⼊的⽤户名称需要存储到⼀个变量中。
2.grep 过滤/etc/passwd 中是否存在这个⽤户
3.判断/home下是否有该⽤户的家⽬录
4.else,提示⽤户不存在。

#!/bin/bash
#********************************************************************
#Author:               xu
#QQ:                  779115590
#Date:                2020-06-03
#FileName:            if-05.sh
#Description:         The test script
#********************************************************************

read -p "请输⼊你要查询的⽤户: " users
f grep "$users" /etc/passwd &>/dev/null;then
	echo "$users 存在系统中"
elif ls -d /home/$users &>/dev/null; then
	echo "$users ⽤户不存在该系统,但⽤户家⽬录存在"
else
	echo "$users 不存在该系统中,也不存在家⽬录"
fi
  • 通过脚本传⼊两个参数,进⾏整数关系⽐较。⽐如: if.sh [ 1 2 | 2 2 | 2 3 ],请使⽤双分⽀和多 分⽀两种⽅式实现
#!/bin/bash
#********************************************************************
#Author:               xu
#QQ:                  779115590
#Date:                2020-06-03
#FileName:            if-06.sh
#Description:         The test script
#********************************************************************

if [ $1 -eq $2 ];then 		#判断$1与$2是否相等
	echo "$1 = $2"
else
	if [ $1 -gt $2 ];then 	#判断$1 是否⼤于 $2
		echo "$1 > $2"
	else					# $1 ⼩于 $2
		echo "$1 < $2" 
	fi
fi

# 多分⽀
#!/bin/bash
#********************************************************************
#Author:               xu
#QQ:                  779115590
#Date:                2020-06-03
#FileName:            if-06.sh
#Description:         The test script
#********************************************************************

if [ $1 -eq $2 ];then 		#判断$1与$2是否相等
	echo "$1 = $2"
elif [ $1 -gt $2 ];then 	#判断$1 是否⼤于 $2
	echo "$1 > $2"
else						#$1 ⼩于 $2
	echo "$1 < $2" 
fi

二、基于文件进行判断、

个人笔记Shell编程实践:if_bash

  • 1.备份⽂件⾄/backup/system/filename-2020-06-04,如果该⽬录不存在则⾃动创建。
1.需要⽤户交互的输⼊需要备份的⽂件
2.判断⽬录是否存在。如果不存在则创建
3.执⾏cp命令完成备份操作

#!/bin/bash
#********************************************************************
#Author:               xu
#QQ:                  779115590
#Date:                2020-06-03
#FileName:            if-08.sh
#Description:         The test script
#********************************************************************

Dest=/backup/system
Date=$(date +%F)

read -p "请输⼊你要备份的⽂件: " Src_File

#判断⽬录是否存在,如果⽬录不存在则创建该⽬录
if [ ! -d $Dest ];then
mkdir -p $Dest
fi

# 执⾏备份操作
cp -rp ${Src_File} $Dest/filename_${Date}
  • 2.继需求1,判断备份的⽂件是否存在,如果不存在则提示”No such file or directory“,然后退 出。
#!/bin/bash
#********************************************************************
#Author:               xu
#QQ:                  779115590
#Date:                2020-06-03
#FileName:            if-08.sh
#Description:         The test script
#********************************************************************

Dest=/backup/system
Date=$(date +%F)

read -p "请输⼊你要备份的⽂件: " Src_File

#判断⽤户输⼊的⽂件是否存在
if [ ! -f ${Src_File} ];then
	echo "${Src_File} No such file or directory"
	exit
fi

#判断⽬录是否存在,如果⽬录不存在则创建该⽬录
if [ ! -d $Dest ];then
	mkdir -p $Dest
fi

# 执⾏备份操作
cp -rp ${Src_File} $Dest/filename_${Date}
  • 3.继需求1、2,判断备份的⽂件是否为空,如果为空则提示" This is file empty",然后退出。
#!/bin/bash
#********************************************************************
#Author:               xu
#QQ:                  779115590
#Date:                2020-06-03
#FileName:            if-08.sh
#Description:         The test script
#********************************************************************

Dest=/backup/system

Date=$(date +%F)

read -p "请输⼊你要备份的⽂件: " Src_File

#判断⽤户输⼊的⽂件是否存在
if [ ! -f ${Src_File} ];then
	echo "${Src_File} No such file or directory"
	exit
	fi

#判断⽤户备份的⽂件是否为空
if [ ! -s ${Src_File} ];then
	echo "${Src_File} This is file empty" 
	exit
fi

#判断⽬录是否存在,如果⽬录不存在则创建该⽬录 
if [ ! -d $Dest ];then
	mkdir -p $Dest
fi

# 执⾏备份操作
cp -rp ${Src_File} $Dest/filename_${Date}

三、基于整数进行判断

个人笔记Shell编程实践:if_后缀_02

  • 1.用户执⾏脚本,sh status.sh nginx,则检查nginx服务的运⾏状态。(仅⽀持传递⼀个参数)
1.控制⽤户仅能传递⼀个参数 $#
2.检查服务的运⾏状态,systemctl status nginx

#!/bin/bash
#********************************************************************
#Author:               xu
#QQ:                  779115590
#Date:                2020-06-03
#FileName:            if-09.sh
#Description:         The test script
#********************************************************************

if [ $# -eq 1 ];then
	#检查服务的状态
	systemctl status $1 &>/dev/null
	#判断服务运⾏的结果
	if [ $? -eq 0 ];then
		echo "$1 服务正在运⾏"
	else
		echo "$1 服务没有运⾏"
	fi
else
	echo "USAGE: sh $0 service_name"
	exit
fi
  • 2.查看磁盘/当前使⽤状态,如果使⽤率超过30%则报警发邮件
1.如何查看 /分区的磁盘使⽤状态
2.提取 /分区使⽤状态百分⽐
3.将已使⽤的百分⽐与我们设定的阈值30%进⾏⽐对
超过百分之30则发邮件报警 ( 写到⼀个⽂件中 ⽤户:时间:磁盘的状态情况 ) 没有超过百分之30则不处理

#!/bin/bash
#********************************************************************
#Author:               xu
#QQ:                  779115590
#Date:                2020-06-03
#FileName:            if-10.sh
#Description:         The test script
#********************************************************************

#1.提取磁盘使⽤的百分⽐
Disk_Use=$(df -h | grep '/$' |awk '{print $5}')
Date=$(date +%F-%T)

#2.判断磁盘使⽤百分⽐是否超过30,如果超过,则写⼊⼀个⽂件中。
if [ ${Disk_Use%\%} -ge 30 ];then
	echo "${USER}:${Date}: Disk Is Use ${Disk_Use}" >> /tmp/disk_use.txt
fi

四、基于字符进行判断

个人笔记Shell编程实践:if_linux_03

#!/bin/bash
#********************************************************************
#Author:               xu
#QQ:                  779115590
#Date:                2020-06-03
#FileName:            if-11.sh
#Description:         The test script
#********************************************************************

read -p "请输⼊⼀个字符: " action

if [ -z $action ];then
	echo "请不要直接回⻋..."
	exit
fi

echo "你输⼊的是: $action"
提示学⽣输⼊⾃⼰的成绩:
1.如果分数⼤于0⼩于59提示补考。
2.如果分数⼤于60⼩于70提示良好。
3.如果分数⼤于71⼩于85提示好。
4.如果分数⼤于86⼩于100提示优秀。

#!/bin/bash
#********************************************************************
#Author:               xu
#QQ:                  779115590
#Date:                2020-06-03
#FileName:            if-12.sh
#Description:         The test script
#********************************************************************

read -p "请输⼊你的成绩: " Cj

if [ -z $Cj ];then
	echo "请输⼊正确的成绩分数.."
	exit
fi

if [ $Cj -ge 0 ] && [ $Cj -le 59 ];then
	echo "你需要补考"
elif [ $Cj -ge 60 ] && [ $Cj -le 70 ];then
	echo "成绩良好"
elif [ $Cj -ge 71 ] && [ $Cj -le 85 ];then
	echo "成绩挺好"
elif [ $Cj -ge 86 ] && [ $Cj -le 100 ];then
	echo "成绩优秀"
else
	echo "成绩的分数范围是0-100"
	exit
fi
#控制⽤户输⼊的是纯数字
if [[ ! $Cj =~ ^[0-9]+$ ]];then
	echo "请输⼊纯数字,,"
	exit
fi
  • 编写⼀个创建⽤户的脚本。 (oldxu10) 1.提示⽤户输⼊要创建⽤户的前缀,必须是英⽂。 oldxu 2.提 示⽤户输⼊后缀,必须是数字。 10 3.如果前缀和后缀都没有问题,则进⾏⽤户创建。【如果该⽤户已 经创建,需要提示已创建,没有创建才进⾏创建操作。】
1.交互:read
2.判断⽤户输⼊的前缀是否是全英⽂
3.判断⽤户输⼊的后缀是否是全数字
4.判断 前缀+后缀 是否存在系统中
	存在: 提示该⽤户已存在系统中
	否则: 创建该⽤户

#!/bin/bash
#********************************************************************
#Author:               xu
#QQ:                  779115590
#Date:                2020-06-03
#FileName:            if-13.sh
#Description:         The test script
#********************************************************************

read -p "请输⼊你要在该系统中创建的⽤户前缀[英⽂] " qz
if [[ ! $qz =~ ^[a-Z]+$ ]];then
	echo ""
	echo "------------------------------"
	echo "⽤户的前缀需要输⼊纯英⽂...."
	exit
fi

read -p "请输⼊你要在该系统中创建的⽤户后缀[数字] " hz
if [[ ! $hz =~ ^[0-9]+$ ]];then
	echo ""
	echo "------------------------------"
	echo "⽤户的后缀需要输⼊纯数字..."
	exit
fi

users=${qz}${hz}

id $users &>/dev/null		#0表示⽤户存在系统 1表示⽤户不存在系统
if [ $? -ne 0 ];then
	useradd $users
	echo "$users 创建成功" 
else
	echo "$users 已经存在" 
fi