目录
一、循环语句
1)for循环语句
- 读取不同的变量值,用来逐个执行同一组命令
#类C语言格式
for ((i=0;i<=5;i++));do
echo "$i"
done
#一般格式
for i in {1..5}; do
echo "$1"
done
for ((;;)) #死循环
示例:
1.批量添加用户
- 用户名存放在users.txt文件中,每行一个
- 初始密码均为123456
- 验证脚本
for i in $(cat /opt/user.txt);do
useradd $i
echo 123456 | passwd --stdin $i
done
2.根据IP地址检查主机状态
- IP地址存放在ipadds.txt文件中,每行一个
- 使用ping命令检测各主机的连通性
- ping通的IP地址放到/opt/hosts文件中
for i in $(cat /root/ipaddr1.txt);do
ping -c 3 -W 2 $i &> /dev/null
if [ $? -eq 0 ];then
echo $i >> /opt/hosts
else
echo "false"
fi
done
3.数字累加脚本(1-100)
sum=0
for i in {1..100};do
sum=$(($i+$sum))
done
echo "$sum"
4.循环打印9*9乘法表
for i in {1..9};do
for ((j=1;j<=i;j++));do
echo -ne "$i*$j=$(($i*$j))\t"
done
echo
done
5.利用for循环将多个文本文件内容合并为一个文件
for file in /opt/*.txt;do
cat "$file" >> ky28.txt
done
continue命令
continue用于停止本次循环,不再执行后续命令,直接进入下一轮循环,并非将整个循环体终止
for (( i = 1; i < 11; i++ ));do
if [ $i -eq 4 ] || [ $i -eq 7 ]
then
continue
fi
echo "Iteration number: $i"
done
#运行结果为输出 1 2 3 5 6 8 9 10
bash t1.sh
Iteration number: 1
Iteration number: 2
Iteration number: 3
Iteration number: 5
Iteration number: 6
Iteration number: 8
Iteration number: 9
Iteration number: 10
for i in {1..3};do
echo $i
for j in {1..5};do
if [ $j -eq 2 ];then
continue 2 #停止两级的本次循环
fi
echo $j
done
done
#运行结果为输出 11 21 31
11
21
31
break命令
break命令用于跳出当前命令所在的循环体,也即直接终止了整个循环命令
for (( i = 1; i < 11; i++ ));do
if [ $i -eq 4 ] || [ $i -eq 7 ]
then
break
fi
echo "Iteration number: $i"
done
#运行结果输出为 1 2 3
bash t2.sh
Iteration number: 1
Iteration number: 2
Iteration number: 3
for i in {1..3};do
echo $i
for j in {1..5};do
if [ $j -eq 2 ];then
break 2 #终止两级循环
fi
echo $j
done
done
#运行结果输出为11
11
2)while循环语句
- 重复测试某个条件,只要条件成立则反复执行
# While循环语句与for循环功能类似,主要用于对某个数据域进行循环读取、对文件进行遍历,通常用于需要循环某个文件或者列表,满足循环条件会一直循环,不满足则退出循环,其语法格式以while…do开头,done结尾与
while [ $i -le 5 ];do
echo "$i"
let i++
done
#运行结果输出为
0
1
2
3
4
示例:
1.系统随机生成一个0~100的数,进行猜数字游戏,由用户进行输入
输入数大于随机数,会提示猜大了
输入数小于随机数,会提示猜小了
直到正确猜出才会退出,并且输出一共猜了几次
a=$[RANDOM%100+1]
time=0
while ture;do
let time++
read -p "输入一个数字:" num
if [ $num -eq $a ];then
echo "您猜对了,一共猜了${time}次"
break
elid [ $num -gt $a ];then
echo "您猜大了!"
else
echo “您猜小了”
fi
done
2.输入一个网段,对该网段的1..254IP进行ping命令,并判断是否连通,成功则将IP放入/opt/hosts.txt
read -p “请输入一个网段(xxx.xxx.xxx.):” ip
for i in {1..254};do
{
ping -c 3 -W 2 ${ip}${i} &> /dev/null
if [ $? -eq 0 ];then
echo "${ip}${i} is online!"
echo ${ip}${i} >> /opt/hosts.txt
else
echo "${ip}${i} is offline!"
fi
}$ #快速并行结构执行
done
3.购物
逛淘宝选购商品
每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元)
每次选购完成或不买都会提示用户是否继续逛下一家商店
如果不再继续逛的话进行购物车结算总额
sum=0
while true ;do
read -p "clothes/trousers/shoe/hat/socks/quit:" a
case $a in
clothes)
let sum+=500
;;
trousers)
let sum+=400
;;
shoe)
let sum+=350
;;
hat)
let sum+=150
;;
socks)
let sum+=50
;;
quit)
echo "$sum¥"
break
;;
*)
;;
esac
read -p "return? Y/N:" b
if [[ $b == N ]];then
echo "$sum¥"
break
fi
done
3)untli循环语句
until 语句,它与 while 不同之处在于,是当条件表达式为 false 时才循环,实际使用中比较少,这里不再讲解。
until [ $i -gt 10 ];do
echo $i
let i++
sum=$(($sum+$i))
done