for循环语句与while循环语句的结构与用法

简介

shell作为一种脚本语言,同样包含循环、分支等其他程序控制结构,从而能够轻松完成更加复杂的工作,具有强大的功能。

1.for循环语句

1.1 for语句的结构与使用条件

  • 读取不同的变量值,用来逐个执行同一组命令

for循环语句结构:

在这里插入图片描述
命令格式:

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

for循环使用条件:

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

1.2 for语句的应用示例

1)根据IP列表检查主机的状态

项目步骤:创建需要测试的主机列表;创建循环主体,根据ping的结果反馈,判断是否在线或下线(如果为真则认定在线,否则认定是下线)。

[root@localhost~]# vim ipadds.txt	//用做测试的列表文件
192.168.1.1
192.168.1.10
192.168.1.20
[root@localhost ~]# vim chkhosts.sh	//循环检查各主机的脚本
#!/bin/bash
HLIST=$(cat /root/ipadds.txt)
for IP in $HLIST
do
	ping -c 3-i 0.2 - W 3 $IP &> /dev/null	//-c发送包的数量;-i发送 ping包间隔;-W超时时间
 	if [ $? -eq 0 ]
 	then echo "Host $IP is up."
 	else 
 	echo "Host $IP is down."
 	fi
done
[root@localhost~ ]# chmod +x chkhosts.sh
[root@localhost~ ]# ./chkhosts.sh	//测试并确认执行结果
Host 192.168.1.1 is up.	
Host 192.168.1.10 is up.
Host 192.168.1.20 is down.

2)根据姓名列表批量添加用户

项目步骤:循环创建列表里这些用户,并给他们这些设定初始化密码,假设密码设为“123123”

[root@localhost ~]# vim uaddfor.sh	//批量添加用户的脚本
#!/bin/bash
ULIST=$(cat /root/users.txt)
for uname in $ULIST
do
	if [ $uname == `grep_ $uname /etc/passwd | awk -F: '{print $1)’` ]
	then echo "姓名重复”
	fi
	useradd $uname
	echo "123123" passwd --stdin $UNAME &>/dev/null
done
[root@localhost ~]# chmod +x uaddfor. sh
[root@localhost ~]# ./uaddfor. sh	//测试并确认执行结果
[root@localhost ~]# tail -2 /etc/passwd
lindong:x :1006:1006: :/home/lindong:/bin/bash
hanli:x :1007:1007::/home/hanli:/bin/bash

2.使用while循环语句

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

2.1 while循环语句结构

使用while循环语句时,可以根据特定的条件反复执行一个命令序列,直到该条件不再满足时为止。在脚本应用中,应该避免出现死循环的情况,否则后边的命令操作将无法执行。

while循环语句的语法结构如下:

while 条件测试操作
do
	命令序列
done

在这里插入图片描述
while语句的执行流程:

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

注意:

使用while循环语句时,有两个特殊的条件测试操作,即true(真)和false(假)。使用true作为条件时,表示条件永远成立,循环体内的命令序列将无限循环下去,除非强制中止脚本(或通过 exit 语句退出脚本);反之,若使用 false 作为条件时,循环体将不会执行。

2.2 while循环语句应用示例

1)批量添加规律编号的用户
若要添加20个用户,名称依次为sul、su2、…、su20

[root@localhost ~]# vim uaddwhile.sh
#!/bin/bash
i=1
while [ $i -le 20 ] 	//控制循环条件
do	//重复循环执行的操作
	uname="su$i"
	if [ $uname ==`grep $uname /etc/passwd | awk -F: '{print $1]’` ]
	then echo "姓名重复”
	fi
	useradd $uname
	echo 123123 | passwd --stdin $uname &> /dev/null
	let i++
done
[root@localhost ~]# chmod +x uaddwhile.sh
[root@localhost ~]# ./uaddwhile.sh
[root@localhost ~]# grep "su"/etc/passwd / tail -3
su18:x:1022:1022::/home/su18:/bin/bash
su19:x:1023:1023::/home/su19:/bin/bash
su20:x:1024:1024::/home/su20:/bin/bash
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值