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 退出,直接退出程序