一、使用for循环语句

1)for 语句的结构

for变量名in取值列表

do

命令序列

done

执行流程:

首先将列表中的第1个取值赋给变量,并执行do……done循环体中的命令序列;然后将列表中的第2个取值赋给变量,并执行循环体中的命令序列……依次类推,直到列表中的所有取值都用完,最后将跳至done语句,表示结束循环。

LinuxShell 脚本for、while、case语句的应用_yellow

2) for 语句应用示例

例1:根据姓名列表批量添加用户

首先创建员工列表文件users.txt

[root@localhost ~]# vim /root/users.txt//用做测试的列表文件

LinuxShell 脚本for、while、case语句的应用_color_02

[root@localhost ~]# vimuaddfor.sh//批量添加用户的脚本

LinuxShell 脚本for、while、case语句的应用_yellow_03

[root@localhost ~]# chmod +x uaddfor.sh

[root@localhost ~]# ./uaddfor.sh//测试并确认执行结果

[root@localhost ~]# tail -3 /etc/passwd

chenye:x:1011:1011::/home/chenye:/bin/bash

dengchao:x:1012:1012::/home/dengchao:/bin/bash

zhangjie:x:1013:1013::/home/zhangjie:/bin/bash

例2:批量删除用户

LinuxShell 脚本for、while、case语句的应用_color_04

例3:根据ip 地址列检查主机状态

首先 创建主机列表文件

[root@localhost ~]# vimipadds.txt//用做测试的列表文件

LinuxShell 脚本for、while、case语句的应用_justify_05

[root@localhost ~]# vimchkhosts.sh//循环检查各主机的脚本

LinuxShell 脚本for、while、case语句的应用_yellow_06

注意:

if 语句、for语句以及其他各种Shell 脚本语句,都是可以嵌套使用的

二、使用while 循环语句

1)for语句和while语句对比

for循环语句适用于列表对象无规律、且列表来源已固定(如某列表文件)的场合

while循环语句适用于要求控制循环次数、操作对象按数字顺序编号、按特定条件执行重复操作

2)while 语句的结构

while条件测试操作

do

命令序列

done

执行流程:首先判断while 后的条件测试操作结果,如果条件成立,则执行do……done循环体中的命令序列;返回while 后再次判断条件测试操作结果,如果条件仍然成立,则继续执行循环体;再次返回到while 后,判断条件测试结果……如此循环,直到while后的条件测试结果不再成立为止,最后跳转到done语句,表示结束循环

LinuxShell 脚本for、while、case语句的应用_color_07

注意:

1)使用while 循环语句时,有两个特殊的条件测试操作,即 true(真)、false(假)

true:表示条件永远成立,循环体内的命令序列将无限执行下去,除非强制终止脚本(或通过exit 语句退出脚本)

false:循环体将不会被执行

2)使用while循环语句要注意避免陷入"死循环"

3)while语句应用示例

例1:批量添加规律编号的用户

[root@localhost ~]# vimuaddwhile.sh//批量添加用户的脚本

LinuxShell 脚本for、while、case语句的应用_justify_08

例2:批量删除规律编号的用户

LinuxShell 脚本for、while、case语句的应用_justify_09

例3:猜价格游戏

LinuxShell 脚本for、while、case语句的应用_justify_10

三、使用case分支语句

1)case语句的使用情况

某个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列。

与if语句的区别

if语句需要判断多个不同的条件

case语句只是判断一个变量的不同取值

2)case语句的基本结构

case变量值in

模式1)

命令序列1

;;

模式2)

命令序列2

;;

……

*)

默认命令序列

esac

执行流程:

首先使用"变量值"与模式1进行比较,若取值相同则执行模式1后的命令序列,直到遇见双分号";;"后跳转至esac,表示分支结束;若与模式1不相匹配,则继续与模式2 进行比较,若取值相同则执行模式2 后的命令序列,直到遇见双分号";;"后跳转至esac,表示结束分支,……依次类推,若找不到任何匹配的值,则执行默认模式"*)"后的命令序列,直到遇见esac后结束分支

LinuxShell 脚本for、while、case语句的应用_yellow_11

注意:

1)case行尾必须为单词"in" ,每一模式必须以右括号")"结束

2)双分号";;"表示命令序列的结束

3)模式字符串中,可以用方括号表示一个连续的范围,例如:"[0-9]";还可以用竖杠符号"|"表示或,例如"A|B"

4)最后的"*)"表示默认模式,其中的*相当于通配符

3)case语句的应用示例

例1:检查用户输入的字符类型

LinuxShell 脚本for、while、case语句的应用_yellow_12

例2:编写系统服务脚本

[root@localhost ~]# vimmyprog.sh

LinuxShell 脚本for、while、case语句的应用_color_13

若要将myprog.sh服务交给chkconfig来管理,还需要添加相应的识别配置,并将myprog.sh脚本复制到/etc/init.d/目录下,然后执行"chkconfig --add myprog.sh",添加为标准的系统服务