第三章 循环
常用循环有:for,while,until,select,其中前三种工作中最常用。
1,for循环语法结构
功能:主要用于固定次数的循环,而不能用于守护进程及无限循环。
#第一种格式:
for 变量名 in 取值列表
do循环体
done#变量名依次获取in后面的变量列表内容,取值表之间用空格分隔,每次只取一个,然后进入循环,执行完所有指令,当执行到done时结束本次循环,依此类推[root@localhost scripts]# cat ping001.sh
#!/bin/bash
for loop in 1 2 3 4 5
doecho "The vlaue is xiaoqian"
done
[root@localhost scripts]# sh ping001.sh
The vlaue is xiaoqian
The vlaue is xiaoqian
The vlaue is xiaoqian
The vlaue is xiaoqian
The vlaue is xiaoqian
#第二种格式:
for 变量名 in 取值列表;do 循环体;done
2,for循序语法案例实战
1,实现批量主机ping探测
[root@localhost scripts]# cat ping002.sh
#!/bin/bash
#ping check
>ip.txt #先清除该文件内容
for i in {2..254}
do{ip=192.168.88.$i#网段ping -c1 -W1 $ip &> /dev/null#-W超时时间,意思就是等待一秒if [ $? -eq 0 ];thenecho "$ip" | tee -a ip.txt#tee收集结果,-a追加fi} &#{} &中间有空格,后台运行
done
wait
echo "finish"#回显一个结果
[root@localhost scripts]# sh ping2.sh
192.168.88.2
192.168.88.120
finish
2,for循环实现批量用户创建
#!/usr/bin/bash
while :
do
read -p "pls enter pre & pass & num [xu 123 1]:" pre pass numprintf "user information
\-----------------
pre:$pre
paswd:$passnumber:$num
\-----------------
"
read -p "are you sure?[yes/no/quit]:" action
if [ "$action" = "yes" ];thenbreak
elif [ "$action" = "quit" ];then exit 0
elsecontinue
fi
done
echo "create user start"
for i in `seq -w $num `
do user=$pre$iid $user &>/dev/nullif [ $? -eq 0 ];thenecho "$user exists"elseuseradd $userecho "$pass" | passwd --stdin $userif [ $? -eq 0 ];then echo "$user is created"fifi
done
3,九九乘法表
[root@localhost script]# vim for1.sh
#!/bin/bash
for ((i=1;i<=9;i++))
dofor ((j=1;j<=i;j++))doecho -ne "$i*$j=$((i*j))\t"done
echo
done
3,while循环
while循环主要用来重复执行一组命令或语句,循环次数既可以固定,也可不固定
while 条件测试
do循环体
done #对条件进行判断,如果条件成立是,则执行do和done之间的循环体,直到条件不成立时才停止循环
4,while循环语句案例实战
1,#while循环从1-10输出
[root@localhost script]# vim while1.sh
#!/bin/bash
i=1
while [ $i -le 10 ]
doecho $ilet i++
done
2,#判断用户输入的用户名,如果不是root,则让用户一直输入
#!/bin/bash
read -p "请输入用户名:" User
while [ $User != "root" ]
doread -p "请输入用户名:" User
done
5,Shell的并发控制
1,for循环实现Shell的并发控制
=========for循环========
for条件测试
do循环体
done
==========当条件为真时,执行循环体============
2,for后台循环实现Shell的并发控制
=========for循环========
for条件测试
do{循环体}&
done
==========当条件为真时,执行循环体,&表示后台执行============