LinuxShell 脚本for、while、case语句的应用
一、使用for循环语句
1)for 语句的结构
for变量名in取值列表
do
命令序列
done
执行流程:
首先将列表中的第1个取值赋给变量,并执行do……done循环体中的命令序列;然后将列表中的第2个取值赋给变量,并执行循环体中的命令序列……依次类推,直到列表中的所有取值都用完,最后将跳至done语句,表示结束循环。
2) for 语句应用示例
例1:根据姓名列表批量添加用户
首先创建员工列表文件users.txt
[root@localhost ~]# vim /root/users.txt//用做测试的列表文件
[root@localhost ~]# vimuaddfor.sh//批量添加用户的脚本
[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:批量删除用户
例3:根据ip 地址列检查主机状态
首先 创建主机列表文件
[root@localhost ~]# vimipadds.txt//用做测试的列表文件
[root@localhost ~]# vimchkhosts.sh//循环检查各主机的脚本
注意:
if 语句、for语句以及其他各种Shell 脚本语句,都是可以嵌套使用的
二、使用while 循环语句
1)for语句和while语句对比
for循环语句适用于列表对象无规律、且列表来源已固定(如某列表文件)的场合
while循环语句适用于要求控制循环次数、操作对象按数字顺序编号、按特定条件执行重复操作
2)while 语句的结构
while条件测试操作
do
命令序列
done
执行流程:首先判断while 后的条件测试操作结果,如果条件成立,则执行do……done循环体中的命令序列;返回while 后再次判断条件测试操作结果,如果条件仍然成立,则继续执行循环体;再次返回到while 后,判断条件测试结果……如此循环,直到while后的条件测试结果不再成立为止,最后跳转到done语句,表示结束循环
注意:
1)使用while 循环语句时,有两个特殊的条件测试操作,即 true(真)、false(假)
true:表示条件永远成立,循环体内的命令序列将无限执行下去,除非强制终止脚本(或通过exit 语句退出脚本)
false:循环体将不会被执行
2)使用while循环语句要注意避免陷入"死循环"
3)while语句应用示例
例1:批量添加规律编号的用户
[root@localhost ~]# vimuaddwhile.sh//批量添加用户的脚本
例2:批量删除规律编号的用户
例3:猜价格游戏
三、使用case分支语句
1)case语句的使用情况
某个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列。
与if语句的区别
if语句需要判断多个不同的条件
case语句只是判断一个变量的不同取值
2)case语句的基本结构
case变量值in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
……
*)
默认命令序列
esac
执行流程:
首先使用"变量值"与模式1进行比较,若取值相同则执行模式1后的命令序列,直到遇见双分号";;"后跳转至esac,表示分支结束;若与模式1不相匹配,则继续与模式2 进行比较,若取值相同则执行模式2 后的命令序列,直到遇见双分号";;"后跳转至esac,表示结束分支,……依次类推,若找不到任何匹配的值,则执行默认模式"*)"后的命令序列,直到遇见esac后结束分支
注意:
1)case行尾必须为单词"in" ,每一模式必须以右括号")"结束
2)双分号";;"表示命令序列的结束
3)模式字符串中,可以用方括号表示一个连续的范围,例如:"[0-9]";还可以用竖杠符号"|"表示或,例如"A|B"
4)最后的"*)"表示默认模式,其中的*相当于通配符
3)case语句的应用示例
例1:检查用户输入的字符类型
例2:编写系统服务脚本
[root@localhost ~]# vimmyprog.sh
若要将myprog.sh服务交给chkconfig来管理,还需要添加相应的识别配置,并将myprog.sh脚本复制到/etc/init.d/目录下,然后执行"chkconfig --add myprog.sh",添加为标准的系统服务
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。