Linux编程 23 shell编程(结构化条件判断 命令if -then , if-then ... elif-then ...else,if test)
一.概述
在上一篇里讲到了shell脚本,shell按照命令在脚本中出现的顺序依次进行处理,对于顺序操作已经足够了,但许多程序要求对shell脚本中的命令加入一些逻辑流程控制,这样的命令通常叫做 结构化命令。
1.1 使用if - then语句
--最基本的结构化就是if -then语句,格式如下:
if command
then
commands
fi
在其他编程语言中,if是一个等式,值结果为ture或false,但在bash shell的if语句并不是这样。在bash shell的if语句会运行if后面的那个命令,如果该命令的退出状态码是0,位于then部分的命令就会被执行。反之则不执行,继续执行脚本中的下一个命令。 fi 语句用来表示if -then语句到此结束。下面是一个if -then简单例子如下:

上面脚本在if行采用了pwd命令,命令成功结束,echo语句显示了文本字符串。
使用if 执行多个命令时,bash shell会将这些命令当成一个块,如果if语句行的命令退出状态值为0, 所有命令都会被执行,如果if语句行的命令的退出状态不为0,所有的命令都会被跳过。下面一个案例if 涉及到了两个命令一个是grep $testuser, 另一个是显示路径/etc/passwd。上图示例中mysql用户存在,报以退出状态码是0。并显示了echo信息。

下面演示如果testuser变量设置成一个系统上不存在的用户,状态码则不是返回0,不进入if then 中,什么都不会显示。

1.2 if-then-else语句
如果if 执行命令返回一个非零退出状态码,bash shell 会继续执行脚本中的下一条命令,这时else语句提供了作用,格式如下:
-- if -then -else格式:
if command
then
commands
else
commands
fi
下面示例,在原有脚本上加入else语句块,最后显示了else中的信息。

1.3 嵌套if
嵌套的if -then 语句位于主if -then-else语句的else代码块中。如下所示在else 语句块中再嵌入if-then-else

对于else部分的另一种形式是: elif, 这样就不用再写多个if-then语句了,elif是另一个if-then语句延续else部分, 这种比上面的if嵌套可读性强, 同样把上面的脚本改一下,示例如下,if 命令退出状态码不为0,进入到elif语句块中。

对于elif后面还可以加else语句块 ,当elif命令返回也不为0时,进入最后的else语句块,如下图所示:

对于 elif语句 还可以是多个串起来。这里就不再演示, 语法如下:
if command1
then
command set
elif command2
then
...
elif command3
then
...
else
...
fi
对于上面的if结构化语句,归纳起来如下面四种格式, 类似于其它编辑语言的if ..else 或if ..else if.. else。
if-then
if-then else
if-then elif-then else
if-then elif-then elif-then else
1.4 结构化test命令
上面的if 命令只能测试普通的shell命令的状态码,下面介绍test命令,它能测试不同条件, 条件成立同样是退出状态码为0, 如果条件不成立测返回非0状态码。
-- test命令格式如下
if test condition
then
commands
fi
下面是使用test命令确定变量中是否有内容,下面的testuser变量值为mysql, 因此test命令返回状态码为0,进入了then语句块中。示例如下:

下面演示变量没有值的情况下,test命令返回状态码不为0,进入了else语句块中。

在bash shell中提供了另一种条件测试方法,无需在if -then语句中声明test命令,使用[condition] 这种应该是日常使用比较频繁的。 这种代替test的用法在下一篇中在详细解说。
--格式如下:
if [condition]
then
commands
fi
Linux编程 23 shell编程(结构化条件判断 命令if -then , if-then ... elif-then ...else,if test)的更多相关文章
- linux操作系统5 shell编程
知识内容: 1.shell编程预备知识 2.shell变量 3.表达式与运算符 4.分支循环语句 5.函数 一.shell编程预备知识 1.什么是shell编程 shell是与linux交互的基本工具 ...
- linux Shell中常用的条件判断
linux Shell中常用的条件判断 -b file 若文件存在且是一个块特殊文件,则为真 -c file 若文件存在且是一个字符特殊文件,则为真 -d ...
- SHELL学习笔记----IF条件判断,判断条件
SHELL学习笔记----IF条件判断,判断条件 前言: 无论什么编程语言都离不开条件判断.SHELL也不例外. if list then do something here ...
- Linux编程 24 shell编程(结构化 if [ condition ] 数值比较,字符串比较)
一.概述 接着上篇讲的结构化命令,最后讲到了test命令的另一种写法 if [ condition ],它的语法格式如下: --格式如下: if [ condition ] then commands ...
- Linux与Unix shell编程指南(完整高清版).pdf
找到一本很详细的Linux Shell脚本教程,其实里面不光讲了Shell脚本编程,还介绍了系统的各种命令 http://vdisk.weibo.com/s/yVBlEojGMQMpv 本书共分五部分 ...
- Linux下的Shell编程
从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...
- Linux学习之Shell编程基础
转自:http://my.oschina.net/itblog/blog/204410 1 语法基本介绍1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来 ...
- linux下的Shell编程(3)shell里的流程控制
if 语句 if 表达式如果条件命令组为真,则执行 then 后的部分.标准形式: if 判断命令,可以有很多个,真假取最后的返回值 then 如果前述为真做什么 [ # 方括号代表可选,别真打进去了 ...
- [No000014A]Linux简介与shell编程
Linux 介绍 内核 库: .so 共享对象,windows:dll 动态链接库 应用程序 Linux的基本原则: 1.由目的单一的小程序组成:组合小程序完成复杂任务: 2.一切皆文件: 3.尽量避 ...
随机推荐
- 浅谈React数据流管理
引言:为什么数据流管理如此重要?react的核心思想就是:UI=render(data),data就是我们说的数据流,render是react提供的纯函数,所以用户界面的展示完全取决于数据层.这篇文章 ...
- HTML的Tomcat
修改D:\software\apache-tomcat-8.0.44\webapps\ROOT\WEB-INF\web.xml: <?xml version="1.0" en ...
- 滚动公告--jq
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- How to enable C development in a Windows 10 development environment VM
To enable C development in a Windows 10 development environment VM, follow these steps: Start VS in ...
- Python之xml学习笔记
XML处理模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,至今很多传统公司如金融行业的很多系统的接口还主要是xml. xml的格式如下,就是通过&l ...
- Mac下git配置
1.下载git 2.配置key macdeMacBook-Pro:~ mac$ cd ~/.ssh macdeMacBook-Pro:.ssh mac$ ssh-keygen -t rsa -C &q ...
- gitlab 之 升级、迁移
-----故事背景- 公司服务器用vm装的虚拟机,由于公司服务器经常无故重启,且找不到原因,所以公司准备将vm迁移至Hyper-V,Hyper-V可以自启动虚拟机且免费. -----升级.迁移- 首先 ...
- JavaScript基础学习笔记整理
1.关于JS: (1)脚本语言——不需要编译的语言(常见有cmd,t-sql)----解释性语言; (2)动态类型的语言——1.代码只有执行到那个位置才知道那个变量中存储的是什么 2.对象中没有某个属 ...
- 删除CSDN点击“阅读更多”按钮跳转到登录界面的功能
manifest.json { "manifest_version": 2, "name": "Helper2", "versio ...
- Visual Studio 常见的快捷键
“Ctrl + -” 回到上一个光标位置 “Ctrl + Shift + -” 前进到下一个光标位置 “Ctrl + C” ...