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没有语句执行,就不 ...
随机推荐
- 装13失败后的逆袭(ComboBox的联动)
当我们在做ComboBox的联动的时候飞一般的敲出自认为完美的代码.在运行的时候突然变得不完美了. 比如: 如果发生了这种情况会不会就卡磁了呢 当然不会作为程序猿的我们考的是我们聪明的大脑,当然会想出 ...
- 通过trie树单词自动补全(二)
经常使用iciba进行单词查询, 关于他的搜索建议是通过单词前缀做的索引, 所以自己想动手实现下, 当然如果借助mysql的话,一条sql语句就能实现, 网上查询了下trie正适合做这个,所以通过C语 ...
- LUA 利用#遍历表的问题
tb ={ } t = { "hello", , , 'w', , tb } --~ 1 hello --~ 2 1 --~ 3 2 --~ 4 w --~ 5 4 --~ 6 t ...
- Libsvm Matlab 快速安装教程 (适用于Win7+, 64bit, and Matlab2016a+)
近日在开始学习Machine Learning SVM 相关算法,将Matlab平台安装SVM的步骤记录如下,亲测可用: 开发环境: Windows 8 64 bit, Matlab 2016a, S ...
- echo print() print_r() var_dump()的区别
常用调试方法 echo()可以一次输出多个值,多个值之间用逗号分隔.echo是语言结构(language construct),而并不是真正的函数,因此不能作为表达式的一部分使用. print()函数 ...
- 不一样的猜数字游戏 — leetcode 375. Guess Number Higher or Lower II
好久没切 leetcode 的题了,静下心来切了道,这道题比较有意思,和大家分享下. 我把它叫做 "不一样的猜数字游戏",我们先来看看传统的猜数字游戏,Guess Number H ...
- mysql中价格用什么数据类型表示最佳?
DECIMAL和NUMERIC都行DECIMAL和NUMERIC类型在MySQL中视为相同的类型.它们用于保存必须为确切精度的值,例如货币数据.当声明该类型的列时,可以(并且通常要)指定精度和标度:例 ...
- redshift 調節螢幕色溫 保護眼睛
// install redshift sudo apt-get install redshift // 調節 5000K 色溫 redshift -O 5000 // reset 色溫 redshi ...
- java 8
java 8 发布已经有一段时间了,然而很多新特性被拒之门外,让人敬而生畏,但是,时代在进步,技术在发展,要追随时代的脚步就要跟随新的潮流.总结下java 8 中常用的小功能点,学如逆水行舟,不进则退 ...
- memcached
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached ...