常用循环有:for,while,until,select,其中前三种工作中最常用。
功能:主要用于固定次数的循环,而不能用于守护进程及无限循环。
#第一种格式:
for 变量名 in 取值列表
do
循环体
done
#变量名依次获取in后面的变量列表内容,取值表之间用空格分隔,每次只取一个,然后进入循环,执行完所有指令,当执行到done时结束本次循环,依此类推
[root@localhost scripts]# cat ping001.sh
#!/bin/bash
for loop in 1 2 3 4 5
do
echo "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
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 ];then
echo "$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 num
printf "user information
\-----------------
pre:$pre
paswd:$pass
number:$num
\-----------------
"
read -p "are you sure?[yes/no/quit]:" action
if [ "$action" = "yes" ];then
break
elif [ "$action" = "quit" ];then
exit 0
else
continue
fi
done
echo "create user start"
for i in `seq -w $num `
do
user=$pre$i
id $user &>/dev/null
if [ $? -eq 0 ];then
echo "$user exists"
else
useradd $user
echo "$pass" | passwd --stdin $user
if [ $? -eq 0 ];then
echo "$user is created"
fi
fi
done
3,九九乘法表
[root@localhost script]# vim for1.sh
#!/bin/bash
for ((i=1;i<=9;i++))
do
for ((j=1;j<=i;j++))
do
echo -ne "$i*$j=$((i*j))\t"
done
echo
done
while循环主要用来重复执行一组命令或语句,循环次数既可以固定,也可不固定
while 条件测试
do
循环体
done
#对条件进行判断,如果条件成立是,则执行do和done之间的循环体,直到条件不成立时才停止循环
1,#while循环从1-10输出
[root@localhost script]# vim while1.sh
#!/bin/bash
i=1
while [ $i -le 10 ]
do
echo $i
let i++
done
2,#判断用户输入的用户名,如果不是root,则让用户一直输入
#!/bin/bash
read -p "请输入用户名:" User
while [ $User != "root" ]
do
read -p "请输入用户名:" User
done
1,for循环实现Shell的并发控制
=========for循环========
for条件测试
do
循环体
done
==========当条件为真时,执行循环体============
2,for后台循环实现Shell的并发控制
=========for循环========
for条件测试
do
{
循环体
}&
done
==========当条件为真时,执行循环体,&表示后台执行============