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 '{print $5}' | cut -d"%"-f1)

#把根分区使用率作为变量值赋予变量rate

if [$rate -ge 80 】

#判断rate的值,如果大于等于80,则执行then程序

then

echo 'Warning! /dev/sda3 is full!!"

#打印警告信息。在实际工作中,也可以向管理员发送邮件

fi

其实这个脚本最主要的地方是"rate=$(df-h|grep "/dev/sda3"|awk'{print$5}'|cut-d"%"-f1)"这条命令,我们来分析一下这条命令:先使用"df-h"列出系统中的分区情况;然后使用"grep"命令提取出根分区行;再使用"awk"命令列出第五列,也就是根分区使用率这一列(不过使用率是 10%,不好比较,还要提取出 10 这个数字);最后使用"cut"命令(cut 命令比 awk 命令简单),以"%"作为分隔符,提取出第一列。

这条命令的执行结果如下:

[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

这样显示条件测试的结果还是非常不方便的。当时是因为我们还没有讲 if 语句,所以只能用逻辑与和逻辑或来显示测试结果。既然我们已经学习了 if 语句,就把这个条件测试改写为 if 语句吧。

#!/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

解释一下这个脚本的思路:其实逻辑与和逻辑或也是在判断前一条命令的"$?"的返回值是不是 0,如果是 0,则前一条命令正确执行;如果不是 0,则证明前一条命令执行错误。双分支if条件语句的判断思路也是测试条件判断式是否成立,如果成立,则执行"then"中的命令;如果不成立,则执行"else"中的命令。

多分支 if 条件语句

在多分支 if 条件语句中,允许执行多次判断。也就是当条件判断式 1 成立时,执行程序 1;当条件判断式 2 成立时,执行程序 2;依次类推,当所有条件不成立时,执行最后的程序。语法如下:

if[条件判断式1]

then

当条件判断式1成立时,执行程序1

elif [条件判断式2]

then

当条件判断式2成立时,执行程序2

…省略更多条件...

else

当所有条件都不成立时,最后执行此程序、

fi

例如,用多分支 if 条件语句来判断用户输入的是一个个文件还是一个目录。

[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

解释一下脚本思路:这个脚本比较简单,需要说明的是 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.sh

Please input a filename: jkgeia

#随便输入不是文件的字符串

Your input is not a file!

#报错信息是自己定义的

[root@localhost ~]# echo $?

2

#变量$?的返回值是我们自己定义的2

if shell 条件语句简写_Shell if条件判断语句用法详解相关推荐

  1. csh for循环_shell中的for循环用法详解_linux shell

    这篇文章主要介绍了shell中的for循环用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 for 命令: for i i ...

  2. if shell 条件语句简写_shell中的if语句

    1.基本语法: if[ command ]; then 符合该条件执行的语句 fi 2.扩展语法: if[ command ];then 符合该条件执行的语句elif[ command ];then ...

  3. pivot sqlserver 条件_行转列之SQLSERVERPIVOT与用法详解

    在数据库操作中,有些时候我们遇到需要实现"行转列"的需求,例如一下的表为某店铺的一周收入情况表: WEEK_INCOME(WEEK VARCHAR(10),INCOME DECIM ...

  4. 【Scripts系列】之Makefile中条件分支ifeq/else/endif/else ifeq/ifneq/ifdef/ifndef用法详解

    DATE: 2019-2-22 前言       条件分支的用法在任何编程语言和脚本以及逻辑中都广泛使用.前文讲述过C语言中预处理的条件编译#ifdef/#if/#elif/#else/#endif用 ...

  5. php switch case 判断语句,PHP的switch判断语句的“高级”用法详解,switch详解_PHP教程...

    PHP的switch判断语句的"高级"用法详解,switch详解 只所以称为"高级"用法,是因为我连switch的最基础的用法都还没有掌握,so,接下来讲的其实 ...

  6. PHP使用Switch语句判断星座,PHP的switch判断语句的“高级”用法详解 用switch语句怎样判断成绩的等级...

    php switch case 求具体详解,case里面能加if语句? swich 语句 我非常喜欢用 case里面加if干嘛 . php switch中能加if语句吗 PHP里 switch cas ...

  7. c语言for表达式1的作用,C语言for语句用法详解

    C语言for语句用法详解 C语言是一门高级计算机编程语言,设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言.下面小编给大家介绍C语言f ...

  8. sql语句中exists用法详解

    文章目录 一.语法说明 exists: not exists: 二.常用示例说明 1.查询a表在b表中存在数据 2.查询a表在b表中不存在数据 3.查询时间最新记录 4.exists替代distinc ...

  9. java if 用法详解_Java if判断语句用法详解

    Java if判断语句用法详解 if关键字中文意思是如果,其细致的语法归纳来说总共有三种:if语句.if-else语句和if-else if-else语句,下面重点介绍if语句. if语句 语法 if ...

最新文章

  1. 在Kmplayer中设置多字幕
  2. 生产订单成本的计划、控制和结算
  3. spring3创建RESTFul Web Service
  4. android SQLiteOpenHelper 使用
  5. 【script】python实现多线程将doc、docx转pdf,doc转docx
  6. 硬核数据研究:年轻人为什么这么喜欢“哈哈哈哈”?
  7. 简洁的c++http协议获取内容(二)--获取服务器图片
  8. Android两个控件叠在一起,如何让被挡住的控件显示出来
  9. java操作hbase使用hbase-client2依赖
  10. Linux下的SYN flood***
  11. 【python学习】装饰器@
  12. [论文总结] 智慧农业论文摘要阅读概览
  13. python教程-1.基础篇
  14. 进程调度之5:系统调用exit与wait4
  15. 使用PS调整图片大小
  16. Autoware感知瞎学笔记(一)lidar_kf_contour_track
  17. Unity Run Time Gizmos
  18. 拼题A (PTA) 公共题集题解收录
  19. 51单片机 智能小车
  20. win10家庭版远程无法连接win11专业版,报错“你的凭据不工作“

热门文章

  1. 几个常用SQL2000语句
  2. linux 5识别网卡,CentOS 5.5系统识别不了Atheros AR8151网卡怎么办?
  3. 中英对照 关于计算机的科技英语,《计算机专业英语》(中英文对照).pdf
  4. matlab将数据输出到excel中,matlab将数据保存为excel表格-怎样将MATLAB中的数据输出到excel中...
  5. mysql支持的时区列表_mysql按天分组支持时区
  6. java form的时间格式_SpringMvc接收日期表单提交,自动转换成Date类型方法
  7. python opencv报错_OpenCV in Python 入门问题,python报错 -问答-阿里云开发者社区-阿里云...
  8. 修改数据包欺骗服务器,Fiddler协议捕获编辑工具与Session欺骗原理详解
  9. npm环境安装linux,Node.js环境在linux上的部署教程
  10. ENQUEUE_UNIQUE_RENDER_COMMAND_ONEPARAMETER