自学Linux Shell12.1-结构化命令if-then

点击返回 自学Linux命令行与Shell脚本之路

12.1-结构化命令if-then

许多程序要求对shell脚本中的命令施加一些逻辑流程控制。有一类命令会根据条件使脚本跳过某些命令。这样的命令通常称为结构化命令(structured command)。

1. 基本的结构化if-then语句

结构化命令允许你改变程序执行的顺序。在bash shell中有不少结构化命令,基本的结构化命令就是if-then语句,if-then语句可以有两种格式

第一种:

1 if    command
2 then
3       commands
4 fi

第二种:

1 if  command;then
2    commands
3 fi
  • bash shell的if语句会运行if后面的那个命令。
  • 如果该命令的退出状态码是0 (该命令成功运行),位于then部分的命令就会被执行。
    如果该命令的退出状态码是其他值,then部分的命令就不会被执行,bash shell会继续执行脚本中的下一个命令。
  • then的部分可以不止一条命令,会将这些命令当成一个块
    如果该命令的退出状态码是0 (该命令成功运行),位于then部分的所有命令就会被执行。
    如果该命令的退出状态码是其他值,then部分的所有命令就不会被执行,bash shell会继续执行脚本中的下一个命令。
  • fi语句用来表示if-then 语句到此结束。

举例1

举例2

举例3

 举例4

if语句行使用grep命令在/etc/passwd文件中查找某个用户名当前是否在系统上使用。如果有用户使用了那个登录名,脚本会显示一些文本信息并列出该用户HOME目录的bash文件。

但是,如果将testuser变量设置成一个系统上不存在的用户,则什么都不会显示。

2. if-then-else语句

1 if  command
2 then
3     command
4 else
5     command
6 fi
  • 当if语句中的命令返回零退出状态码时,会执行then部分中的命令
  • 当if语句中的命令返回非零退出状态码时,会执行else部分中的命令
  • else部分可以包含多条命令

举例1

 

举例2

3. 嵌套 if

  • bash shell会依次执行if语句,只有第一个返回退出状态码0的语句中的then部分会被执行
  • elif语句中,紧跟其后的else语句属于elif代码块的

 1 if  command
 2 then
 3     command
 4 elif command
 5 then
 6     command
 7 elif command
 8 then 
 9     command
10 else
11     command     
12 fi

posted on 2018-06-21 15:44  CARLOS_CHIANG  阅读(...)  评论(...编辑  收藏

导航