Shell if条件判断语句用法详解
单分支 if 条件语句
单分支 if 条件语句最为简单,就是只有一个判断条件,如果符合条件则执行某个程序,否则什么事情都不做。语法如下:
if [条件判断式];then
程序
fi
- if 语句使用 fi 结尾,和一般语言使用大括号结尾不同。
- [条件判断式] 就是使用 test 命令判断,所以中括号和条件判断式之间必须有空格。
- then 后面跟符合条件之后执行的程序,可以放在 [] 之后,用":"分隔;也可以换行写入,就不需要":"了,比如单分支 if 条件语句还可以这样写:
if [条件判断式]
then
程序
fi
举个例子,我想通过脚本判断根分区的使用率是否超过 80%,如果超过 80% 则向管理员报警,请他注意。 脚本就可以这样写:
[root@localhost ~]# df -h
#查看一下服务器的分区状况
文件系统 容量 已用 可用 已用% %挂载点
/dev/sda3 20G 1.8G 17G 10% /
tmpfs 306M 0 306M 0% /dev/shm
/dev/sda1 194M 26M 158M 15% /boot
/dev/srO 3.5G 3.5G 0100% /mnt/cdrom
[root@localhost ~]# vi sh/if1.sh
#!/bin/bash
#统计根分区的使用率
rate=$(df -h | grep "/dev/sda3" | awk '{print $5}' | cut -d"%"-f1)
#把根分区使用率作为变量值赋予变量rate
if [$rate -ge 80 】
#判断rate的值,如果大于等于80,则执行then程序
then
echo 'Warning! /dev/sda3 is full!!"
#打印警告信息。在实际工作中,也可以向管理员发送邮件
fi
这条命令的执行结果如下:
[root@localhost ~]# df -h | grep "/dev/sda3" |awk'{print $5}'|cut -d"%" -f1 10
提取出根分区的使用率后,判断这个数字是否大于等于 80,如果大于等于 80 则报警。至于报警信息,我们在脚本中直接输出到屏幕上。在实际工作中,因为服务器屏幕并不是 24 小时有人值守的,所以也可以给管理员发送邮件,用于报警。脚本写好之后,就可以利用我们在前面章节中讲到的系统定时任务,让这个脚本每天或几天执行一次,就可以实现自动检测硬盘剩余空间了。后续的系统管理的脚本,如果需要重复执行,则也需要依赖系统定时任务。
双分支条件语句
在双分支 if 条件语句中,当条件判断式成立时,则执行某个程序;当条件判断式不成立时,则执行另一个程序。语法如下:
if [条件判断式]
then
当条件判断式成立时,执行的程序
else
当条件判断式不成立时,执行的另一个程序
fi
[root@localhost ~]# [-d /root/sh] && echo "yes" || echo "no"
#第一条判断命令如果正确执行,则打印"yes"; 否则打印"no"
yes
#!/bin/bash
#判断输入的文件是否是一个目录
read -t 30 -p "Please input a directory:" dir #read接受键盘的输入,并存入dir变量
if[-d $dir]
#测试$dir中的内容是否是一个目录
then
echo "yes"
#如果是一个目录,则输出yes
else
echo "no"
#如果不是一个目录,则输出no
fi
多分支 if 条件语句
在多分支 if 条件语句中,允许执行多次判断。也就是当条件判断式 1 成立时,执行程序 1;当条件判断式 2 成立时,执行程序 2;依次类推,当所有条件不成立时,执行最后的程序。语法如下:
if[条件判断式1]
then
当条件判断式1成立时,执行程序1
elif [条件判断式2]
then
当条件判断式2成立时,执行程序2
…省略更多条件...
else
当所有条件都不成立时,最后执行此程序、
fi
[root@localhost ~]#vi sh/if-elif.sh
#!/bin/bash
#判断用户输入的是什么文件
read -p "Please input a filename:" file
#接收键盘的输入,并赋予变量file
if[-z "$file"]
#判断file变量是否为空
then
echo "Error,please input a filename"
#如果为空,则执行程序1,也就是输出报错信息、
exit 1
#退出程序,并定义返回值为1 (把返回值赋予变量$?)
elif[!-e "$file"]
#判断file的值是否存在
then
echo 'Your input is not a file!"
#如果不存在,则执行程序2
exit 2
#退出程序,并定义返回值为2
elif[-f "$file"]
#判断file的值是否为普通文件
then
echo "$file is a regulare file!"
#如果是普通文件,则执行程序3
elif[-d"$file"]
#判断file的值是否为目录文件
then
echo "$file is a directory!"
#如果是目录文件,则执行程序4
else
echo is an other file!"
#如果以上判断都不是,则执行程序5
fi
[root@localhost ~]# chmod 755 sh/if-elif.sh
#赋予执行权限
[root@localhost ~]# sh/if-elif.sh
#执行脚本
Please input a filename:
#没有任何输入
Error,please input a filename
#报错信息是脚本中自己定义的
[root@localhost ~]# echo $?
1
#变量$?的返回值是我们自己定义的1
[root@localhost ~]# sh/if-elif.sh
Please input a filename: jkgeia
#随便输入不是文件的字符串
Your input is not a file!
#报错信息是自己定义的
[root@localhost ~]# echo $?
2
#变量$?的返回值是我们自己定义的2