一、单分支if语句
1.格式
if [ 条件判断式 ];then #如果条件成立,执行下面的程序
程序
fi #if语句结束的标志
或者
if [ 条件判断式 ]
then
程序
fi
2.注意
if语句使用fi结尾
[ 条件判断式 ]:中括号与条件判断式直接必须有空格
二、双分支if语句
1.格式
if [ 条件判断式 ];then
条件成立时,执行的程序
else
条件不成立时,执行的语句
fi
2.判断是否为目录案例
#!/bin/bash
# File Name: if_else.sh
# Author: lixian
#######################
read -p "请输入一个目录:" Dir
if [ -d "$Dir" ];then
echo "这是个目录"
else
echo "这不是目录"
fi
[root@xian /server/scripts]# sh if_else.sh
请输入一个目录:/lx
这不是目录
[root@xian /server/scripts]# sh if_else.sh
请输入一个目录:/opt
这是个目录
[root@xian /server/scripts]# sh if_else.sh
请输入一个目录:/etc
这是个目录
三、多分支if语句
1.格式
if [ 条件 ];then
指令
elif [ 条件 ];then
指令
else
指令
fi
2.判断一个用户是否存在该系统案例
#!/bin/bash
# File Name: if-2.sh
# Author: lixian
#######################
read -p "请输入你要查询的用户:" User
if id $User &>/dev/null;then
echo "该用户在本系统内!"
if ls -d /home/$User &>/dev/null;then
echo "该用户的家目录在本系统内!"
exit
else
echo "该用户的家目录不在本系统内!"
exit
fi
elif ls -d /home/$User &>/dev/null;then
echo "该用户不在该系统内!但家目录在本系统内!"
else
echo "该用户和家目录都不在本系统内!"
fi
[root@xian /server/scripts]# sh if-2.sh
请输入你要查询的用户:lx
该用户和家目录都不在本系统内!
[root@xian /server/scripts]# sh if-2.sh
请输入你要查询的用户:root
该用户在本系统内!
该用户的家目录不在本系统内!
[root@xian /server/scripts]# ls /home/
[root@xian /server/scripts]# useradd lx
[root@xian /server/scripts]# sh if-2.sh
请输入你要查询的用户:lx
该用户在本系统内!
该用户的家目录在本系统内!
[root@xian /server/scripts]# rm -rf /home/lx/
[root@xian /server/scripts]# sh if-2.sh
请输入你要查询的用户:lx
该用户在本系统内!
该用户的家目录不在本系统内!
四、流程控制语句之文件比较
[root@lixian ~]# ls
aa.txt
[root@lixian ~]# [ -e /root/aa.txt ] && echo "yes" || echo "no"
yes
[root@lixian ~]# [ -e /root/bbw.txt ] && echo "yes" || echo "no"
no
&&:前面语句成功,输出yes,如果判断没有这个文件,也会执行,但不会输出yes
| | :前面语句不成功,输出no
[root@lixian ~]# [ -w /root/aa.txt ] && echo "yes" || echo "no"
yes
只要文件有写权限,就会判断为真假,不会区分是属主、属组还是其他人
但可以写程序,先截取属组属主其他人再去判断,但那样会比较复杂了
备份数据库案例
脚本代码
#!/bin/bash
# File Name: mysql_backup.sh
# Author: lixian
#######################
#定义变量
Backup_Dir=/backup/mysql
Date=$(date +%F)
#判断目录是否存在
[ -d ${Backup_Dir} ] || mkdir -p ${Backup_Dir}
#提示用户输入备份数据库的用户
read -p "请输入需要备份的数据库用户:" User
#提示用户输入备份数据库用户的密码
read -s -p "请输入备份数据库用户的密码:" PassWord
echo
mysql -u${User} -p${PassWord} -e "show databases;" &>/dev/null
if [ $? -eq 0 ];then
echo -e "\033[42;37m 已进入$User数据库... \033[0m"
else
echo -e "\033[41;37m 数据库用户或者密码输入错误,请检查数据库用户及密码! \033[0m"
exit
fi
#提示用户输入需要备份的数据库
read -p "请输入需要备份的数据库名:" DbName
#判断数据库是否存在
mysql -u${User} -p${PassWord} -e "use $DbName;" &>/dev/null
if [ $? -eq 0 ];then
echo -e "\033[42;37m 数据库${DbName}存在,正在备份数据库... \033[0m"
else
echo -e "\033[41;37m 数据库${DbName}不存在,请检查是否有数据库! \033[0m"
exit
fi
#开始备份数据库
mysqldump -u${User} -p${PassWord} --single-transaction -R -B ${DbName} > ${Backup_Dir}/${Date}_${DbName}.sql
#判断数据库是否备份成功
if [ $? -eq 0 ];then
echo -e "\033[42;37m 数据库${DbName}备份成功... \033[0m"
else
echo -e "\033[41;37m 数据库${DbName}备份失败... \033[0m"
fi
执行结果
五、流程控制语句之整数比较
比较两个数字的大小脚本案例
脚本代码
[root@xian /server/scripts]# sh big_small.sh
请输入第一个比较大小的正整数:88
请输入第二个比较大小的正整数:88
88 = 88
[root@xian /server/scripts]# cat big_small.sh
#!/bin/bash
# File Name: big_small.sh
# Author: lixian
#######################
read -p "请输入第一个比较大小的正整数:" Num1
read -p "请输入第二个比较大小的正整数:" Num2
if [ $Num1 -gt $Num2 ];then
echo "$Num1 > $Num2"
elif [ $Num1 -lt $Num2 ];then
echo "$Num1 < $Num2"
else
echo "$Num1 = $Num2"
fi
执行结果
[root@xian /server/scripts]# sh big_small.sh
请输入第一个比较大小的正整数:1000
请输入第二个比较大小的正整数:999
1000 > 999
[root@xian /server/scripts]# sh big_small.sh
请输入第一个比较大小的正整数:80
请输入第二个比较大小的正整数:90
80 < 90
[root@xian /server/scripts]# sh big_small.sh
请输入第一个比较大小的正整数:88
请输入第二个比较大小的正整数:88
88 = 88
六、条件判断式语句之字符串的判断
七、条件判断式语句之多重条件判断