7.Shell之for循环语句

小破站学习笔记

for循环语句

将一组命令执行已知的次数

  • 列表循环

用于将一组命令执行已知的次数

for i in {1..10}
	do
		command
	done
	
for i in a b c
	do
		command
	done
	
for i in {0..50..2}
###0 2 4 6 8 以2为步长

for i in $(seq 10)
###也是1到10

for i in {10..1}
###从10到1

for i in $(seq 1 2 10)
###1-10 步长为2


###
{1..10}
$(seq 10)
1 2 3 4
###
  • 不带列表循环
    执行时由用户指定参数和参数个数
for i
	do
		command
	done
  • 类C风格的for循环
for (( expr1;expr2;expr3))
#里面是表达式
	do
	command
	done

#expr1:定义变量并赋初值
#expr2:决定是否进行循环
#expr3:决定循环变量如何改变,决定循环什么时候退出

for (( i=1;i<=5;i++))
	do
	echo $i
	done

for ((i=1;i<=10;i+=2))
#1 3 5 7 9

for ((i=2;i<=10;i+=2))
#2 4 6 8 10

应用案例

  • 脚本计算1-100的奇数和
    思路
    把奇数都遍历出来
sum=0
for ((i=1;i<=100;i+=2))
	do
	sum = $sun + $i
	done
	echo $sum

很多种方法 可以去遍历1-100,再去判断是否为偶数

if [ $[$i%2] -eq 0 ]

循环控制语句

continue:继续;表示循环体下面的代码不执行,重新开始下一次循环,还是继续循环
break:打断;马上停止执行本次循环,执行循环体后面的代码,跳出了整个循环
exit:表示直接跳出程序,退出
  • 判断所输整数是否为质数
#!/bin/bash
read -p "输入一个数字:"number
[ $number -eq 1 ] && echo "$number不是质数" && exit
[ $number -eq 2 ] && echo "$number不是质数" && exit

for i in `seq 2 $[$number-1]`
#for i in `seq 2 $[ $[number-1]/2 ]`
#能被2整除 也能被4整除  有点不懂
	do
	[ $[$number%$i] -eq 0 ] && "$number不是质数" && exit
	done
echo "$number是质数" && exit
  • 批量创建五个新用户,u1-u5,统一加组class,密码123
#!/bin/bash
grep -w ^class /etc/group &> /dev/null
test $? -ne 0 && groupdadd class

for i in {1..5}
	do
	useradd -G class u$i
	echo 123|passwd --stdin u$i
	done

#用户创建信息保存日志
  • 新建用户,并指定家目录都在/zss
#!/bin/bash
[ -f /zss ] && mv /zss /zss.bak || [ ! -d /zss ] && mkdir /zss
#先判断是不是文件 是备份 不是 再判断是不是文件夹 不是创建文件夹
for i in {1..5}
	do
	useradd -d /zss/u$i u$i
	echo 123|passwd --stdin u$i
	done
  • 局域网内脚本检查主机网络通讯
#!/bin/bash
ip=10.1.1
for ((i=1;i<=10;i++))
	do
	{
	ping -c1 $ip.$i &>/dev/null
	if [ $? -eq 0 ];then
		echo "$ip.$i is ok" >> /tmp/ip_up.txt
	else
		echo "$ip.$i is down" >> /tmp/ip_down.txt
	fi
	}&
	done
	wait
	echo "ip check is ok....."

	#或者
	[ $? -eq 0 ] && echo "$ip.$i is ok" >> /tmp/ip_up.txt || echo "$ip.$i is down" >> /tmp/ip_down.txt
	done

  • 并行执行
{}&
表示将程序放到后台并行执行,如果需要等待程序执行完毕在进行下面的内容,需要加wait
time ./zss.sh
查看运行时间

大大提高脚本效率

总结

  • for循环语句结构
列表循环
非列表循环
类C循环
  • for循环结合条件判断和流程控制语句
do...done 循环体
循环体可以是命令集合,再加上条件判断以及流程控制
  • 控制循环语句
continue 继续,跳出本次循环,继续下一次循环
break 打断,跳出循环,执行循环体外的代码
exit 退出,直接退出程序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值