Shell入门教程:流程控制(1)命令的结束状态
在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。
[root@localhost ~]# test.sh
-bash: test.sh: 没有那个文件或目录
[root@localhost ~]# echo $?
127
[root@localhost ~]# ./test.sh
-bash: ./test.sh: 权限不够
[root@localhost ~]# echo $?
126
[root@localhost ~]#
在Bash的流程控制中,需进行条件测试,就是以结束状态作为真假的判断依据:
如果结束状态为0,则判断为真;反之,如果结束状态为非0值,则判断为假。
第二节:if条件判断
先来看一个简单的例子:
if grep -q ^jianbao /etc/passwd; then
echo 'jianbao这个账号存在'
fi
#格式一
if 条件测试; then
命令区域
fi
#格式二
if 条件测试; then
命令区域1
else
命令区域2
fi
#格式三(完整语法)
if 条件测试1; then
命令区域1
elif 条件测试2; then
命令区域2
else
命令区域3
fi
举例一:
if [ -d /root/tmp ]; then
echo '/root/tmp目录存在'
else
echo '/root/tmp目录不存在'
fi
举例二:
#!/bin/bash # 数学的三一律 declare -i a b
a=$1;b=$2 if ((a<b)); then
echo "$a小于 $b"
elif ((a>b)); then
echo "$a大于 $b"
else
echo "$a等于 -$b"
fi
(())是Bash的复合命令(Compound command),内置算术。((算术)) 可对算式的运算结果传回真假值:
如果算术的结果为非0,则结束状态传回0,表示该算式为真;如果算式的结果为0,则结束状态传回1,表示该算式为假。它的意义同于:
let "算术"
举例三:
#!/bin/bash # 数学的三一律 declare -i a b
a=$1;b=$2 if let "a<b"; then
echo "$a小于 $b"
elif let "a>b"; then
echo "$a大于 $b"
else
echo "$a等于 -$b"
fi
Shell入门教程:流程控制(1)命令的结束状态的更多相关文章
- 【重点】Shell入门教程:流程控制(3)条件判断式的真假值
之前曾提到,在Bash中什么是真什么是假,是以命令的结束状态是否为0来做判断.传回0,即为真:传回非0,即为假. 在Bash中,这种可以影响程序流程的式子,称为条件判断式.判断式的操作数分成“单元”及 ...
- shell脚本之流程控制
shell脚本之流程控制 shell脚本之流程控制 条件语句 条件判断 循环语句for,while,until for循环 while循环 until循环 循环控制语句continue 循环控制语 ...
- 【Shell 编程基础第二部分】Shell里的流程控制、Shell里的函数及脚本调试方法!
http://blog.csdn.net/xiaominghimi/article/details/7603003 本站文章均为李华明Himi原创,转载务必在明显处注明:转载自[黑米GameDev街区 ...
- python语法入门之流程控制
python语法入门之流程控制 流程控制是指控制流程,具体指控制程序执行的流程. 流程控制分为三种: 1.顺序结构 程序从上而下的正常执行(正常执行的代码就是顺序结构) 2.分支结构 赋予程序人的思维 ...
- Docker入门教程(二)命令
Docker入门教程(二)命令 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第二篇,介绍了Docker的基本命令以及命令的用法和功能. 在Docker ...
- Python3.7.4入门-2流程控制工具
2 流程控制工具 记得在语句后加冒号 2.1 while # Fibonacci series: # the sum of two elements defines the next a, b = 0 ...
- 【重点】Shell入门教程:流程控制(2)条件判断的写法
第三节:条件判断的写法 if条件判断中,if的语法结构中的“条件判断”可以有多种形式.测试结果是真是假,就看其传回的值是否为0. 条件测试的写法,有以下10种: 1.执行某个命令的结果 这里的命令,可 ...
- Linux Bash Shell入门教程
Linux 系统根据 "#!" 及该字串后面的信息确定该文件的类型,关于这一问题同学们回去以后可以通过 "man magic"命令 及 /usr/share/m ...
- Shell脚本学习 - 流程控制和函数
继续Shell的学习.上两篇是关于基本数据类型,基本语法以及运算符相关,这一篇是流程控制相关(if, for, while) 流程控制 if else 流程控制不可为空,如果else没有语句执行,就不 ...
随机推荐
- linux下更新python
刚开始入门python,想直接入门python3,需要更新一下linux自带的python.自带的python是2.6,可以在终端root下键入python查看python版本. 1.从官网下载pyt ...
- Java多线程系列--“JUC线程池”06之 Callable和Future
概要 本章介绍线程池中的Callable和Future.Callable 和 Future 简介示例和源码分析(基于JDK1.7.0_40) 转载请注明出处:http://www.cnblogs.co ...
- CWMP开源代码研究3——ACS介绍
声明:本文涉及的开源程序代码学习和研究,严禁用于商业目的. 如有任何问题,欢迎和我交流.(企鹅号:408797506) 本文介绍自己用过的ACS,其中包括开源版(提供下载包)和商业版(仅提供安装包下载 ...
- [转载]五种常见的电子商务模式对比:B2B、B2C、C2B、C2C、O2O
转载自http://blog.sina.com.cn/s/blog_64e090b001016843.html 转载自http://blog.sina.com.cn/s/blog_64e090b001 ...
- 判断.net中在windows系统下的字节序
字节序,是指字节在内存中的存储顺序.其又分为大端字节(Big-Endian)序和小端字节序(Little-Endian). 以下摘自百度百科: a) Little-Endian就是低位字节排放在内存的 ...
- jQuery EasyUI视频教程合集
下载地址:http://www.fu83.cn/thread-269-1-1.html 教程内容: 尚学堂科技_jqueryeasyui视频教程_白贺翔 李炎恢jQuery EasyUI视频教程全集 ...
- C 语言学习的第 05 课:C 语言基础(01)
C语言程序中的绝大部分应该记录在以.c作为扩展名的文件里,这种文件叫做C语言 程序的源文件. C语言中还包括以.h作为扩展名的文件,这种文件叫做头文件. C语言中的四则运算: 加:+ 减:- 乘 ...
- APP
第一天 1.环境初步搭建 SmartSniff fiddler ddms AntiDroid Android Killer 百度方法 http://jingyan.baidu.com/article/ ...
- 解决:Win 10 + Mint 18双系统时间不同步,更换系统启动项顺序
1.win10 & mint 18双系统时间同步: 先打开终端下更新一下时间,确保时间无误: sudo apt-get install ntpdate sudo ntpdate time.wi ...
- 数据结构图文解析之:直接插入排序及其优化(二分插入排序)解析及C++实现
0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...