Shell脚本的实质,只是把一系列的shell命令写入文件,然后给予该文件执行权限.执行脚本文件时,脚本中的命令按照自上而下的顺序一条接一条地被执行,直到脚本结束.那么可以改变脚本的执行顺序吗?答案是肯定的.如果你接触过编程类语言,应该对if、for、while不陌生吧(当然,没接触过也丝毫没有关系).shell也有这些结构,它们被称为控制流结构.Shell中控制流具体有哪些呢,这就是本篇文章要讨论的全部内容:
判断 if
分支判断case
循环 for
循环 while
循环 until
其实概括起来,只是2类结构而已:判断和循环.
一、判断 if
if结构的一般格式为:
if command
then
command1
command2
…
fi
其中,if后面的命令command,需要检测其退出状态:如果退出状态为0,则执行then和fi之间的命令;退出状态不为0,则跳过这些命令.
退出状态
在linux系统中,每个命令执行完成后,都会给系统返回一个退出状态.该状态是个数值,用来告诉系统命令执行成功了没有.按照约定,退出状态为0表示成功,不为0表示失败.命令运行失败的常见原因之一,就是传递给命令的参数不对,但是也可能有其他原因.拿grep做为例子,当给grep传递的参数数目不对,或者传递的参数文件不存在,或者grep没有找到指定的模式,都被认为是失败的,返回一个不为0的退出状态.只有当grep在指定文件中找到了指定的模式,才返回退出状态0:
$ who | grep root
root tty2 2009-08-17 16:59
root pts/0 2009-09-29 16:25 (192.168.1.130)
$ echo $?
0
$ who | grep licong
$ echo $?
1
$
符号$?表示上一个命令的退出状态.当我们在登陆用户中找licong时,没找到返回给系统一个值为1的退出状态,我们用ehco把这个状态显示了出来.注意,成功的命令退出状态值总是1,而失败的非0状态值可能因系统而异(并不一定总是*表示0或若干个字符;[…]表示方括号所包含字符中的任意一个.*可以匹配任何内容,我们一般把*
)放在一个分支来作为万能匹配.
加上后面的内容,文章就大大超过文字上限8万字符了,只能把剩下的内容连接到别的文章了,哎...提供一下地址:http://licong.blog.51cto.com/542131/212800
|