在Bash Shell中,流程控制命令有2大类:“条件”、“循环”。属于“条件”的有:if、case;属于“循环”的有:for、while、until;命令 select 既属于“条件”,也属于“循环”。不管是哪一种,均需进行条件测试,再根据测试结果,决定程序流程进行的方向。

以下逐一说明这些命令的用法。

第一节:命令的结束状态

Bash Shell Script 可由许多命令组成。每一个命令执行后,都会传回一个结束状态值,如果执行成功,传回0,如果执行失败,则传回非0值。执行失败,也分成许多状况,例如:

某个命令执行失败,产生严重的信号n,则其结束状态传回值为 128+n。如果执行命令时,发现该命令不存在,则传回值为 127。命令存在但没有执行权,则传回值 126.

Bash的内置变量 $?,用来存储每个命令执行后传回的状态值。如下述举例,执行test.sh时,Bash在搜寻路径中找不到这个Script,结束状态变量 $? 的值为 127;执行 ./test.sh时,由于Script没有执行权,$? 的值为 126。

  1. [root@localhost ~]# test.sh
  2. -bash: test.sh: 没有那个文件或目录
  3. [root@localhost ~]# echo $?
  4. 127
  5. [root@localhost ~]# ./test.sh
  6. -bash: ./test.sh: 权限不够
  7. [root@localhost ~]# echo $?
  8. 126
  9. [root@localhost ~]#

在Bash的流程控制中,需进行条件测试,就是以结束状态作为真假的判断依据:

如果结束状态为0,则判断为真;反之,如果结束状态为非0值,则判断为假。

第二节:if条件判断

先来看一个简单的例子:

  1. if grep -q ^jianbao /etc/passwd; then
  2. echo 'jianbao这个账号存在'
  3. fi

#格式一

  1. if 条件测试; then
  2. 命令区域
  3. fi

#格式二

  1. if 条件测试; then
  2. 命令区域1
  3. else
  4. 命令区域2
  5. fi

#格式三(完整语法)

  1. if 条件测试1; then
  2. 命令区域1
  3. elif 条件测试2; then
  4. 命令区域2
  5. else
  6. 命令区域3
  7. fi

举例一:

  1. if [ -d /root/tmp ]; then
  2. echo '/root/tmp目录存在'
  3. else
  4. echo '/root/tmp目录不存在'
  5. fi

举例二:

  1. #!/bin/bash
  2.  
  3. # 数学的三一律
  4.  
  5. declare -i a b
  6. a=$1;b=$2
  7.  
  8. if ((a<b)); then
  9. echo "$a小于 $b"
  10. elif ((a>b)); then
  11. echo "$a大于 $b"
  12. else
  13. echo "$a等于 -$b"
  14. fi

(())是Bash的复合命令(Compound command),内置算术。((算术)) 可对算式的运算结果传回真假值:

如果算术的结果为非0,则结束状态传回0,表示该算式为真;如果算式的结果为0,则结束状态传回1,表示该算式为假。它的意义同于:

let "算术"

举例三:

  1. #!/bin/bash
  2.  
  3. # 数学的三一律
  4.  
  5. declare -i a b
  6. a=$1;b=$2
  7.  
  8. if let "a<b"; then
  9. echo "$a小于 $b"
  10. elif let "a>b"; then
  11. echo "$a大于 $b"
  12. else
  13. echo "$a等于 -$b"
  14. fi

Shell入门教程:流程控制(1)命令的结束状态的更多相关文章

  1. 【重点】Shell入门教程:流程控制(3)条件判断式的真假值

    之前曾提到,在Bash中什么是真什么是假,是以命令的结束状态是否为0来做判断.传回0,即为真:传回非0,即为假. 在Bash中,这种可以影响程序流程的式子,称为条件判断式.判断式的操作数分成“单元”及 ...

  2. shell脚本之流程控制

      shell脚本之流程控制 shell脚本之流程控制 条件语句 条件判断 循环语句for,while,until for循环 while循环 until循环 循环控制语句continue 循环控制语 ...

  3. 【Shell 编程基础第二部分】Shell里的流程控制、Shell里的函数及脚本调试方法!

    http://blog.csdn.net/xiaominghimi/article/details/7603003 本站文章均为李华明Himi原创,转载务必在明显处注明:转载自[黑米GameDev街区 ...

  4. python语法入门之流程控制

    python语法入门之流程控制 流程控制是指控制流程,具体指控制程序执行的流程. 流程控制分为三种: 1.顺序结构 程序从上而下的正常执行(正常执行的代码就是顺序结构) 2.分支结构 赋予程序人的思维 ...

  5. Docker入门教程(二)命令

    Docker入门教程(二)命令 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第二篇,介绍了Docker的基本命令以及命令的用法和功能. 在Docker ...

  6. Python3.7.4入门-2流程控制工具

    2 流程控制工具 记得在语句后加冒号 2.1 while # Fibonacci series: # the sum of two elements defines the next a, b = 0 ...

  7. 【重点】Shell入门教程:流程控制(2)条件判断的写法

    第三节:条件判断的写法 if条件判断中,if的语法结构中的“条件判断”可以有多种形式.测试结果是真是假,就看其传回的值是否为0. 条件测试的写法,有以下10种: 1.执行某个命令的结果 这里的命令,可 ...

  8. Linux Bash Shell入门教程

    Linux 系统根据 "#!" 及该字串后面的信息确定该文件的类型,关于这一问题同学们回去以后可以通过 "man magic"命令 及 /usr/share/m ...

  9. Shell脚本学习 - 流程控制和函数

    继续Shell的学习.上两篇是关于基本数据类型,基本语法以及运算符相关,这一篇是流程控制相关(if, for, while) 流程控制 if else 流程控制不可为空,如果else没有语句执行,就不 ...

随机推荐

  1. 【Python数据分析】Python模拟登录(一) requests.Session应用

    最近由于某些原因,需要用到Python模拟登录网站,但是以前对这块并不了解,而且目标网站的登录方法较为复杂, 所以一下卡在这里了,于是我决定从简单的模拟开始,逐渐深入地研究下这块. 注:本文仅为交流学 ...

  2. Java面向对象编程 第一章 面向对象开发方法概述

    一.软件开发经历的生命周期: ①软件分析 ②软件设计 ③软件编码 ④ 软件测试 ⑤ 软件部署 ⑥软件维护 二.为了提高软件开发效率,降低软件开发成本,一个优良的软件系统应该具备以下特点: ① 可重用性 ...

  3. 程序测试--DOS界面测试C程序

    打开命令提示符或运行CMD或直接通过路径C:\WINDOWS\System32\cmd.exe打开即可: 转到可执行文件所在的磁盘,然后输入mycount.exe <1.txt命令即可.如图示对 ...

  4. 适配iOS10的哪些事 ---- 学习笔记八

    一. 上传了一个版本,为什么没有构建版本? 解:info.plist中的Bundle version 与上一个版本一致或少于上一个版本,上线新版本时,Bundle version和Bundle ... ...

  5. flex 布局笔记

    1,今天遇到一个问题,就是当元素布局设置为了flex后,里面的内容只有文字,但是对text-align 属性设置无效,仔细想了下,是因为把display 设置为了flex后,flex将里面的文字也认为 ...

  6. linux-windows资源共享

    先安装samba,然后 sudo mount -t cifs //192.168.1.111/Jack_Win_Share /media/ -o username=Jack,password=1,io ...

  7. .NET Core 1.0 RC2 历险之旅

    文章背景:对于.NET Core大家应该并不陌生, 从它被 宣布 到现在已经有1-2年的时间了,其比较重要的一个版本1.0 RC2 也即将发布..Net Core从一个一个的测试版到现在的RC2,经历 ...

  8. 剑指offer 面试题65 滑动窗口的最大值

    import java.awt.print.Printable; import java.beans.VetoableChangeListenerProxy; import java.lang.ref ...

  9. css-display:none和visibility:hidden的不同

    摘自张鑫旭老师的博客-- display:none和visibility:hidden都能使元素隐藏,但是有明显区别,主要有以下三点: 空间占据 重排与重绘 株连性 1.空间占据. 使用display ...

  10. transition

    transition: all 所有属性都将获得过渡效果. property 定义应用过渡效果的 CSS 属性名称列表,列表以逗号分隔 transition-duration 规定完成过渡效果需要多少 ...