Loop:

Loop:循环开始条件和结束条件

Break:命令允许跳出所有循环(终止执行后面的左右循环)

Continue:命令与break类似,它不会跳出所有循环,只跳出当前循环

Exit 0:跳出/终止

Sleep 2:延迟2s执行

Echo -n:不换行显示

For循环:遍历所有变量

格式:

1
2
3
4
5
for [varname] in {values}
do
命令序列1
命令序列2
done

例:根据姓名列表批量创建用户

首先创建一个文本文件user.txt

user1

user2 //这些都是用户名

user3

……..等

创建脚本useradd.sh

1
2
3
4
5
6
7
8
#!/bin/bash
a=`cat /root/user.txt`
for q in $a
do
useradd $q
echo “123.com” | passwd --stdin $q &> /dev/null
echo$q users finished”
done

例:根据IP地址列表检查主机状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash
#先创建一个地址列表文件,输入要检测的IP地址。

a=`cat /root/dizhi.txt`

for q in $a
do
ping -c 2 -i 0.1 -w 1 $q &> /dev/null
if [ $? -eq 0 ];then
echo "host $q is up."
else
echo "host $q is down."
fi
done

While:只要条件成立,执行循环

格式:

1
2
3
4
5
while 条件语句
do
命令序列1
命令序列2
done

例:批量添加规律编号的用户

1
2
3
4
5
6
7
8
9
10
#!/bin/bash

name="zx"
i=1
while [ $i -le 20 ]
do
useradd ${name}$i
echo "123456" | passwd --stdin ${name}$i &> /dev/null
let i++
done

*例:批量删除规律编号的用户**

1
2
3
4
5
6
7
8
9
#!/bin/bash

name="zx"
i=1
while [ $i -le 20 ]
do
userdel -r ${name}$i
let i++
done

例:猜猜商品的价格

RANDOM:随机获得一个小于2的16次方的随机数(65536)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash

price=`expr $RANDOM % 1000`
times=0
echo "商品实际价格范围为0-999,猜猜看是多少?"

while true
do
read -p "请输入你猜测的价格数目:" int
let times++
if [ $int -eq $price ];then
echo "恭喜你猜对了,实际价格是 $int"
echo "你总共猜测了$times次 "
exit 0
elif [ $int -gt $price ];then
echo "太高了"
else
echo "太低了"
fi
done

例:求1加到100的总和

1
2
3
4
5
6
7
8
9
#!/bin/bash
i=1
s=o
while [ $i - le 100 ]
do
s=$(( $s +$i ))
i=$(( $i+1 ))
done
echo “sum is :$s

总结:

1)和for的对比

​ For:从开始就定义了范围,你的输出就在你的定义范围内

​ While:用在列表中,逐级增加

2)如何避免while进入死循环:exit 0

until:不定循环只要条件不成立,循环就会一直继续

格式:

1
2
3
4
5
until 条件判断(必须加!号取反值)
do
命令序列1
命令序列2
done

例:列出0-9

1
2
3
4
5
6
7
#!/bin/bash
a=0
until [ ! $a -lt 10 ]
do
echo $a
let a++
done