第3章 结构化命令

         许多程序在脚本命令之间需要某种逻辑流控制。有一类命令,允许脚本根据变量值的条件或者其他命令的结果跳过一些命令或者循环执行这些命令,这类命令通常称为结构化命令。

3.1if语句

3.1.1 if-then语句

         最基本的结构化命令类型就是if-then语句。if-then语句的格式如下:

         第3章 结构化命令------------(if语句)_shell的if嵌套语句

         bashshell中的if语句运行在if行定义的命令。如果命令的退出状态是0(成功执行命令),将执行then后面的所有命令。如果命令的退出状态是0以外的其他值,那么then后面的语句将不会执行,bash shell会移动到脚本的下一条命令。

         在一些脚本中,还有if-then语句的另一种形式:

         第3章 结构化命令------------(if语句)_shell的if嵌套语句_02

         if-then语句的使用实例如下所示:        

#!/bin/bash
#if-then语句使用实例
if date|grep 2016
then
echo "当前系统时间:"date
fi

if grep $USER /etc/passwd;then
echo "当前用户:"$USER
ls -al $HOME/ShellScript/*
fi

第3章 结构化命令------------(if语句)_shell的if嵌套语句_03

3.1.2 if-then-else语句

         在if-then语句中,无论命令是否成功仅有一个选择。如果命令返回一个非零退出状态代码,bash shell会移动到脚本中的下一条命令,着这正是if-then-else语句存在的原因。

         if-then-else语句格式:

         第3章 结构化命令------------(if语句)_shell的if-then-else_04

         如果if语句的命令返回的退出状态码为0,就会执行在then部分列出的命令;如果if语句行的命令返回非零退出的状态码,bash shell将会执行else部分的命令。

         if-then-else语句操作实例如下所示:

#!/bin/bash
#if-then-else语句使用实例
if who; then
echo $[5**8]
else
date
fi

if Who; then
echo $[5**8]
else
date
fi

第3章 结构化命令------------(if语句)_shell的if嵌套语句_05

3.1.3 嵌套if语句

         有时需要在脚本代码中检查几种情况。可以使用else部分的另一版本,称为elifelif的格式如下所示:

         第3章 结构化命令------------(if语句)_shell的if嵌套语句_06

         如果elif命令返回的退出状态码为0,bash执行第二个then语句部分的命令。可以把多个elif语句串在一起,创建一个大的if-then-elif组。命令快的执行依赖于哪条命令返回的退出状态码为0。bash shell会按顺序执行if语句,只有第一个返回0退出状态的命令导致then部分命令被执行。

         嵌套if语句使用实例:       


#!/bin/bash
#嵌入if语句实例
if ll
then
echo 'Hello World!'
elif li
then
echo 'So Good!'
elif date
then
echo "It is a bad boy!"
fi

第3章 结构化命令------------(if语句)_if语句_07