(1)作用:控制循环次数,执行后,立即跳出当前循环,不会继续执行后续的代码。
[root@localhost ~]# vim 30.sh
for i in {1..3}
do
for j in {1..5}
do
if [ $j -eq 3 ]
then
break 2 #先停内循环,外循环一并终止
fi
echo $j
done
done
[root@localhost ~]# sh 30.sh
1
2
(1)定义:满足条件,只跳出当前循环,不影响后续。
(2)作用:在循环内部跳过本次循环,并继续下一次循环。
[root@localhost ~]# vim continue.sh
for i in {1..5}
do
for j in {1..5}
do
if [ $j -eq 3 ]
then
continue
fi
echo $j
done
done
[root@localhost ~]# sh continue.sh
1
2
4
5
1
2
4
5
1
2
4
5
1
2
4
5
1
2
4
5
#猜数字
con=0
num=$(($RANDOM%100+1))
for ((;;))
do
let con++
read -p "请输入一个数字:" b
if [ $b -eq $num ]
then
echo "bingo,一共猜了${con}次"
break
elif [ $b -gt $num ]
then
echo "猜大了"
else
echo "小了"
fi
done
(1)定义:重复测试某条件,只要条件成立,反复执行。(适合死循环)
1.用while循环计算【1..10】的和。
[root@localhost ~]# vim while.sh
i=0
sum=0
while [ $i -lt 10 ]
do
let i++
sum=$(($sum+$i))
done
echo $sum
[root@localhost ~]# sh while.sh
55
2.用while循环批量创建用户并添加密码。
[root@localhost ~]# vim while1.sh
i=0
while [ $i -lt 5 ]
do
useradd stu${i}
echo "123" | passwd --stdin stu${i} &>/dev/null
if [ $? -eq 0 ]
then
echo "用户被创建"
else
echo "用户已存在"
fi
let i++
done
[root@localhost ~]# sh while1.sh
useradd:用户“stu0”已存在
用户被创建
useradd:用户“stu1”已存在
用户被创建
useradd:用户“stu2”已存在
用户被创建
useradd:用户“stu3”已存在
用户被创建
useradd:用户“stu4”已存在
用户被创建
(1)实操:
1.用until计算1-100的和:
[root@localhost ~]# vim 305.sh
sum=0
i=1
until [ $i -gt 100 ]
do
sum=$[$sum+$i]
let i++
done
echo $sum
[root@localhost ~]# sh 305.sh
5050
for while until
(1)for :主要用于已知循环次数
(2)while:条件满足才执行循环,不满足就退出循环,在绝大多数情况,while和for可以通用,while更好用死循环until条件不满足才能循环,满足条件退出,一般不用循环控制语句:
(3)continue:跳出当前的循环,后续条件继续执行
(4)break:跳出当前循环,结束整个循环。多个循环条件,后面可以跟上数字,默认1。2:控制两层,3:控制三层。
1.逛淘宝选购商品,每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),每次选购完或不买都会提示用户是否继续逛下一家商店,购买如果不再继续逛的话进行购物车结算总额。
vim 1.sh
sum=0
for ((;;))
do
for ((;;))
do
echo "1.衣服售价500元"
echo "2.裤子售价400元"
echo "3.鞋子售价350元"
echo "4.帽子售价150元"
echo "5.袜子售价50元"
read -p "请输入要购买的商品序号:" a
case $a in
1)
echo "衣服已加入购物车,是否继续购买?"
let sum+=500
;;
2)
echo "裤子已加入购物车,是否继续购买?"
let sum+=400
;;
3)
echo "鞋子已加入购物车,是否继续购买?"
let sum+=350
;;
4)
echo "帽子已加入购物车,是否继续购买?"
let sum+=150
;;
5)
echo "袜子已加入购物车,是否继续购买?"
let sum+=50
;;
*)
echo "欢迎下次光临"
break
esac
done
read -p "继续购物还是结算?:" c
if [ $c == y ]
then
continue
elif [ $c == n ]
then
echo "欢迎下次选购,本次消费共计$sum元"
break
else
echo "请正确输入"
fi
done
[root@localhost ~]# sh 301.sh
1.衣服售价500元
2.裤子售价400元
3.鞋子售价350元
4.帽子售价150元
5.袜子售价50元
请输入要购买的商品序号:1
衣服已加入购物车,是否继续购买?
1.衣服售价500元
2.裤子售价400元
3.鞋子售价350元
4.帽子售价150元
5.袜子售价50元
请输入要购买的商品序号:6
欢迎下次光临
继续购物还是结算?:n
欢迎下次选购,本次消费共计500元
2.shell 计算器实现加减乘除和取余。
[root@localhost ~]# vim 302.sh
#!/bin/bash
read -p "请输入第一个数:" a
read -p "请输入第二个数:" b
read -p "请输入运算符:" c
for ((i=1;i<=5;i++))
do
case $c in
+)
num1=$[$a+$b]
echo "$a$c$b=$num1"
;;
-)
num2=$[$a-$b]
echo "$a$c$b=$num2"
;;
\*)
num3=$[$a*$b]
echo "$a$c$b=$num3"
;;
/)
num4=$[$a/$b]
echo "$a$c$b=$num4"
;;
%)
num5=$[$a%$b]
echo "$a$c$b=$num5"
;;
esac
break
done
[root@localhost ~]# sh 302.sh
请输入第一个数:2
请输入第二个数:3
请输入运算符:+
2+3=5
3.打印出某个目录下的所有文件。
[root@localhost ~]# vim 303.sh
for file in { ls /opt/* }
do
echo $file
done
[root@localhost ~]# sh 303.sh
{
ls
/opt/abc.txt
/opt/billkin.txt
/opt/kritt
/opt/kritt.txt
/opt/rh
/opt/wangz
/opt/wangz.txt
}
4.利用 for 循环将多个文本文件内容合并为一个文件。
[root@localhost ~]# vim 304.sh
for i in /root/*.sh
do
cat "$i" >> fang.txt
done
in { ls /opt/* }
do
echo $file
done
[root@localhost ~]# sh 303.sh
{
ls
/opt/abc.txt
/opt/billkin.txt
/opt/kritt
/opt/kritt.txt
/opt/rh
/opt/wangz
/opt/wangz.txt
}
4.利用 for 循环将多个文本文件内容合并为一个文件。
[root@localhost ~]# vim 304.sh
for i in /root/*.sh
do
cat “$i” >> fang.txt
done