一.概述

  在上一篇里讲到了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)的更多相关文章

  1. linux操作系统5 shell编程

    知识内容: 1.shell编程预备知识 2.shell变量 3.表达式与运算符 4.分支循环语句 5.函数 一.shell编程预备知识 1.什么是shell编程 shell是与linux交互的基本工具 ...

  2. linux Shell中常用的条件判断

    linux Shell中常用的条件判断 -b file            若文件存在且是一个块特殊文件,则为真 -c file            若文件存在且是一个字符特殊文件,则为真 -d ...

  3. SHELL学习笔记----IF条件判断,判断条件

    SHELL学习笔记----IF条件判断,判断条件 前言: 无论什么编程语言都离不开条件判断.SHELL也不例外.  if list then           do something here   ...

  4. Linux编程 24 shell编程(结构化 if [ condition ] 数值比较,字符串比较)

    一.概述 接着上篇讲的结构化命令,最后讲到了test命令的另一种写法 if [ condition ],它的语法格式如下: --格式如下: if [ condition ] then commands ...

  5. Linux与Unix shell编程指南(完整高清版).pdf

    找到一本很详细的Linux Shell脚本教程,其实里面不光讲了Shell脚本编程,还介绍了系统的各种命令 http://vdisk.weibo.com/s/yVBlEojGMQMpv 本书共分五部分 ...

  6. Linux下的Shell编程

    从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...

  7. Linux学习之Shell编程基础

    转自:http://my.oschina.net/itblog/blog/204410 1 语法基本介绍1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来 ...

  8. linux下的Shell编程(3)shell里的流程控制

    if 语句 if 表达式如果条件命令组为真,则执行 then 后的部分.标准形式: if 判断命令,可以有很多个,真假取最后的返回值 then 如果前述为真做什么 [ # 方括号代表可选,别真打进去了 ...

  9. [No000014A]Linux简介与shell编程

    Linux 介绍 内核 库: .so 共享对象,windows:dll 动态链接库 应用程序 Linux的基本原则: 1.由目的单一的小程序组成:组合小程序完成复杂任务: 2.一切皆文件: 3.尽量避 ...

随机推荐

  1. uni-app 顶部导航点击更换图标

    更换顶部导航的iconfont.ttf图标,先在配置文件配置好按钮: pages.json文件 "buttons": [ { "text": "\ue ...

  2. MySQL-查询结果缓存

    1.缓存必备: SQL文相同,数库表字段构.记录不变,大小写不敏感,字符集敏感 2.提缓存: 缓存配高.分区 3.多个应用多配置 4.SELECT SQL_NO_CACHE/SQL_CACHE my. ...

  3. Flask web 开发出现错误:TypeError: Allowed methods have to be iterables of strings, for example: @app.route(..., methods=["POST"])

    没有发现普通都语法错误,然后一一比对官方教程里面的代码,发现是在“@bp.route('/<int:id>/delete', methods=('POST'))”这一行代码里面method ...

  4. 基于UML的高校教务管理系统的设计与实现

    一.基本信息 标题:基于UML的高校教务管理系统的设计与实现 时间:2018 出版源:南昌航空大学 领域分类:教育信息化:教务管理系统:UML:SSH:Oracle 二.研究背景 问题定义:高校教务管 ...

  5. C++中_cplusplus及Extern "C"的理解

    一.意义 Extern "C":告诉编译器,这部分代码按C语言的方式进行编译,而不是C++的.   _cplusplus:.cpp文件默认定义的宏.用来判断是否为.cpp文件. 二 ...

  6. 我的C#跨平台之旅(五):使用IoC之依赖注入实现

    引入NuGet包:Unity 实现接口:IDependencyResolver 在启动类中注入依赖的类: 注意:左框中的内容为接口或抽象类,右框中为实际要注入的类. 修改控制类,使用构造方法注入类: ...

  7. HC-05蓝牙模块配置与使用

    蓝牙模块BT-HC05模块是一款高性能的蓝牙串口模块. 1.可用于各种带蓝牙功能的电脑.蓝牙主机.手机.PDA.PSP等智能终端配对. 2.宽波特率范围4800~1382400,并且模块兼容单片机系统 ...

  8. Linux 搜某个文件里关键字的上下500行到执行文件里

    Linux 搜某个文件里关键字的上下500行到执行文件里grep '300000111110' -C 500 ./saastom7061_APP3/logs/sass.log >/app/saa ...

  9. win10 win7 环境下 oracle 11g和Plsql的安装、卸载遇到的问题。

    * win7一体机在安装好oracle和PlSQL后,无法连接到orcl数据库,同时也忘记了sys设置的密码.(在这里应注意在安装过程中,应选择统一口令,这里我均设置成了orcl,同时也应该注意在最后 ...

  10. 转发: windows如何管理内存

    (1)有三种方法:虚拟内存,内存映射文件,内存堆栈. 虚拟内存是将页文件加载到内存,适用于比较大的对象或结构: 内存映射文件是将磁盘上文件加载到内存,适用于大文件和单机的进程间内存共享: 堆栈就是动态 ...