Shell if条件判断语句用法详解
if 条件判断在语言中最为常见,主要用于判断条件是否成立,比如在课堂上,并不是所有的学员都可以进入教室,而是必须符合条件(如必须是本班级学员)才能进入教室。当然,在上课时,是通过人的大脑进行判断的;如果在程序语言中,就要通过 if 条件判断语句来判断了。
单分支 if 条件语句
单分支 if 条件语句最为简单,就是只有一个判断条件,如果符合条件则执行某个程序,否则什么事情都不做。语法如下:if [条件判断式];then程序fi
在使用单分支 if 条件查询时需要注意几点:- if 语句使用 fi 结尾,和一般语言使用大括号结尾不同。
- [条件判断式] 就是使用 test 命令判断,所以中括号和条件判断式之间必须有空格。
- then 后面跟符合条件之后执行的程序,可以放在 [] 之后,用":"分隔;也可以换行写入,就不需要":"了,比如单分支 if 条件语句还可以这样写:
if [条件判断式]then程序fi
单分支 if 条件语句非常简单,但是千万不要小看它,这是流程控制语句最基本的语法。而且在实现 Linux 管理时,我们的管理脚本一般都不复杂,单分支 if 条件语句使用的概率还是很大的。举个例子,我想通过脚本判断根分区的使用率是否超过 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 &39;{print $5}&39; | cut -d"%"-f1)把根分区使用率作为变量值赋予变量rateif [$rate -ge 80 】判断rate的值,如果大于等于80,则执行then程序thenecho &39;Warning! /dev/sda3 is full!!"打印警告信息。在实际工作中,也可以向管理员发送邮件fiapple英文
其实这个脚本最主要的地方是"rate=$(df-h|grep "/dev/sda3"|awk&39;{print$5}&39;|cut-d"%"-f1)"这条命令,我们来分析一下这条命令:先使用"df-h"列出系统中的分区情况;然后使用"grep"命令提取出根分区行;再使用"awk"命令列出第五列,也就是根分区使用率这一列(不过使用率是 10%,不好比较,还要提取出 10 这个数字);最后使用"cut"命令(cut 命令比 awk 命令简单),以"%"作为分隔符,提取出第一列。这条命令的执行结果如下:[root@localhost ~] df -h | grep "/dev/sda3" |awk&39;{print $5}&39;|cut -d"%" -f1 10apple英文
提取出根分区的使用率后,判断这个数字是否大于等于 80,如果大于等于 80 则报警。至于报警信息,我们在脚本中直接输出到屏幕上。在实际工作中,因为服务器屏幕并不是 24 小时有人值守的,所以也可以给管理员发送邮件,用于报警。脚本写好之后,就可以利用我们在前面章节中讲到的系统定时任务,让这个脚本每天或几天执行一次,就可以实现自动检测硬盘剩余空间了。后续的系统管理的脚本,如果需要重复执行,则也需要依赖系统定时任务。双分支条件语句apple英文
在双分支 if 条件语句中,当条件判断式成立时,则执行某个程序;当条件判断式不成立时,则执行另一个程序。语法如下:if [条件判断式]then当条件判断式成立时,执行的程序else当条件判断式不成立时,执行的另一个程序fi
例如,还记得我们在进行条件测试时是怎么显示测试结果的吗?[root@localhost ~] [-d /root/sh] && echo "yes" || echo "no"第一条判断命令如果正确执行,则打印"yes"; 否则打印"no"yesapple英文
这样显示条件测试的结果还是非常不方便的。当时是因为我们还没有讲 if 语句,所以只能用逻辑与和逻辑或来显示测试结果。既然我们已经学习了 if 语句,就把这个条件测试改写为 if 语句吧。!/bin/bash判断输入的文件是否是一个目录read -t 30 -p "Please input a directory:" dir read接受键盘的输入,并存入dir变量if[-d $dir]测试$dir中的内容是否是一个目录thenecho "yes"如果是一个目录,则输出yeselseecho "no"如果不是一个目录,则输出nofiapple英文
解释一下这个脚本的思路:其实逻辑与和逻辑或也是在判断前一条命令的"$?"的返回值是不是 0,如果是 0,则前一条命令正确执行;如果不是 0,则证明前一条命令执行错误。双分支if条件语句的判断思路也是测试条件判断式是否成立,如果成立,则执行"then"中的命令;如果不成立,则执行"else"中的命令。多分支 if 条件语句
在多分支 if 条件语句中,允许执行多次判断。也就是当条件判断式 1 成立时,执行程序 1;当条件判断式 2 成立时,执行程序 2;依次类推,当所有条件不成立时,执行最后的程序。语法如下:if[条件判断式1]then当条件判断式1成立时,执行程序1elif [条件判断式2]then当条件判断式2成立时,执行程序2…省略更多条件...else当所有条件都不成立时,最后执行此程序、fi
例如,用多分支 if 条件语句来判断用户输入的是一个个文件还是一个目录。[root@localhost ~]vi sh/if-elif.sh!/bin/bash判断用户输入的是什么文件read -p "Please input a filename:" file接收键盘的输入,并赋予变量fileif[-z "$file"]判断file变量是否为空thenecho "Error,please input a filename"如果为空,则执行程序1,也就是输出报错信息、exit 1退出程序,并定义返回值为1 (把返回值赋予变量$?)elif[!-e "$file"]判断file的值是否存在thenecho &39;Your input is not a file!"如果不存在,则执行程序2exit 2退出程序,并定义返回值为2elif[-f "$file"]判断file的值是否为普通文件thenecho "$file is a regulare file!"如果是普通文件,则执行程序3elif[-d"$file"]判断file的值是否为目录文件thenecho "$file is a directory!"如果是目录文件,则执行程序4elseecho is an other file!"如果以上判断都不是,则执行程序5fiapple英文
解释一下脚本思路:这个脚本比较简单,需要说明的是 exit 这条命令。这条命令是退出执行程序的命令,如果符合条件 1(没有输入)和条件 2(输入的不是文件),则需要执行 exit 命令;否则程序还是会运行一下脚本的,这不符合我们的要求。至于 exit 后面的返回值,是自由定义的,主要用于把返回值赋予变量 $?。我们执行一下这个脚本:[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.shPlease input a filename: jkgeia随便输入不是文件的字符串Your input is not a file!报错信息是自己定义的[root@localhost ~] echo $?2变量$?的返回值是我们自己定义的2apple英文
版权声明:
本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。