Shell脚本中for循环、while循环及case分支语句

一、for循环语句

当面对各种列表重复任务时,使用简单的if语句已经难以满足要求,而顺序编写全部代码更是显得异常繁琐,困难重重。这将可以使用for循环语句很好的解决类似问题。

1、for语句的结构

使用for循环语句时,需要指定一个变量及可能的取值列表,针对每个不同的取值重复执行相同的命令序列,直到变量值用完退出循环。在这里,“取值列表”称为for语句的执行条件,其中包括多个属性相同的对象,需要预先指定(如通讯录)。
for循环语句的语法结构如下所示:

for 变量名 in 取值列表 do 命令序列 done

上述语句结构中,for语句的操作对象为用户指定名称的变量,并通过in关键字为该变量预先设置了一个取值列表,多个取值之间以空格进行分隔。位于do...done之间的命令序列称为循环体,其中的执行语句需要引用变量以完成相应的任务。

2、for语句的执行流程

首先将列表中的第一个取值赋给变量,并执行do...done循环体中的命令序列;然后将列表中的第二个取值赋给变量,并执行循环体中的命令序列......依此类推,直到列表中的所有取值用完,最后将
跳至done语句,表示结束循环,如下图所示:

浅谈Shell脚本中for循环、while循环及case分支语句

3、for语句应用示例 1)根据姓名列表批量添加用户

根据公司人事部门给出的员工姓名的拼音列表,在Linux服务器中添加相应的用户账户,初始密码均设置为“pwd@123”。其中,员工姓名列表中的账号数量并不固定,而且除了要求账号名称是拼音之外,并无其他特殊规律。
针对上述要求,可先指定员工列表文件user.txt,然后编写一个名为useradd.sh的shell脚本,从user.txt文件中读取各用户名称,重复执行添加用户,设置初始密码的相关操作。

[root@CentOS01 ~]# vim user.txt <!--用做测试的列表文件--> zhangsan lisi wangwu zhaoliu [root@centos01 ~]# vim useradd.sh <!--批量添加用户的脚本--> #!/bin/bash user=$(cat /root/user.txt) for username in $user do useradd $username echo "pwd@123" | passwd --stdin $username &> /dev/null done [root@centos01 ~]# chmod +x useradd.sh <!--添加执行权限--> [root@centos01 ~]# ./useradd.sh <!--运行批量创建用户脚本--> [root@centos01 ~]# tail -5 /etc/passwd <!--确认执行结果--> MySQL:x:1001:1001::/home/mysql:/sbin/nologin zhangsan:x:1002:1002::/home/zhangsan:/bin/bash lisi:x:1003:1003::/home/lisi:/bin/bash wangwu:x:1004:1004::/home/wangwu:/bin/bash zhaoliu:x:1005:1005::/home/zhaoliu:/bin/bash

若要删除useradd.sh脚本所添加的用户,只需要参考上述脚本代码,将for循环体中添加用户的命令序列改为删除用户的操作即可。

[root@centos01 ~]# vim deluser.sh <!--批量删除用户的脚本--> #!/bin/bash user=$(cat /root/user.txt) for username in $user do userdel -r $username done [root@centos01 ~]# chmod +x deluser.sh <!--脚本文件添加执行权限--> [root@centos01 ~]# ./deluser.sh <!--运行批量删除用户脚本--> [root@centos01 ~]# tail -5 /etc/passwd <!--查看执行结果--> postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin test:x:1000:1000:test:/home/test:/bin/bash mysql:x:1001:1001::/home/mysql:/sbin/nologin 二、使用while循环语句

for循环语句非常适用于列表对象无规律,且列表来源已固定(如某个列表文件)的场合。而对于要求控制循环次数、操作对象按数字顺序编号、按特定条件执行重复操作等情况,则更适合适用另一种循环——while语句。

1、whie语句的结构

适用while循环语句时,可以根据特定的条件反复执行一个命令序列,直到该条件不再满足时为止。在脚本应用中,应该避免出现死循环的情况,否则后边的命令操作将无法执行。因此,循环体内的命令序列中应包括修改测试条件的语句,以便在适当的时候测试条件不再成立,从而结束循环。
while循环语句的语法结构如下所示:

while 条件测试操作 do 命令序列 done 2、while语句的执行流程

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

浅谈Shell脚本中for循环、while循环及case分支语句

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/11642.html