while和until语句
continue:跳出当次,后续的条件成立,继续执行
break:一旦break,后续的条件不再执行
exit:满足条件,立刻提出,不论有几层。
双层循环和循环控制语句的使用,while和until的语法使用
一、echo
echo 打印
-n 表示不换行输出
-e 输出转义字符
\b 相当于退格键(backspace)
\n 相当于回车键 换行
\f 换行,换行后的新行的开头连着上一行的行尾
\t 相当于tab键 横向制表符
echo -ne 既不换行又可以使用转义符
1、九九乘法表
for i in {1..9}
do
for ((j=1;j<=i;j++))
do
echo -ne "$i*$j=$(($i*$j))\t"
done
echo
done
2、倒直角三角形
for ((i=5;i>=1;i--))
do
for ((j=1;j<=i;j++))
do
echo
done
echo
done
二、双循环
1、循环控制,continue和break默认数值就是1
for i in {1..3}
do
for j in {1..5}
do
if [ $j -eq 3 ]
then
# break/continue
fi
echo $j
done
echo $i
done
2、双循环中给continue和break赋值
for i in {1..3}
do
for j in {1..5}
do
if [ $j -eq 3 ]
then
# break/continue 2
fi
echo $j
done
echo $i
done
3、双循环中exit使用
for i in {1..3}
do
for j in {1..5}
do
if [ $j -eq 3 ]
then
exit 2
fi
echo $j
done
echo $i
done
4、调试模式
set -x
# 开启调试模式
for i in {1..3}
do
for j in {1..5}
do
if [ $j -eq 3 ]
then
# break/continue
fi
echo $j
done
echo $i
done
sex +x
# 关闭调试模式
三、while和until的语法
1、while 满足条件就执行循环,不满足才会退出
适用条件:死循环,不知道循环多少次,需要主动结束循环,或者达到条件才结束循环
2、whlie格式
while [判断条件]
do
命令序列
done
# 在循环外面定义
while true 永远为真,死循环
while [ 1 -eq 1 ]
while:
3、while练习
3.1 1~100求和?
i=0
sum=0
while [ $i -lt 100 ]
do
let i++
sum=$(($sum+Si))
done
echo $sum
3.2 1~100分别求出奇数和,偶数和
i=0
sum1=0
sum2=0
while [$i -lt 100 ]
do
let i++
if [ $(($i%2)) -eq 0 ]
then
sum1=$(($sum1+$i))
else
sum2=$(($sum2+$i))
fi
done
echo $sum1
echo $sum2
4、untile循环
条件不满足才执行循环,一旦条件成立,循环终止
until [ 条件测试]
do
命令序列
done
5、练习
5.1 打印出/opt目录下,所有的文件(包括目录)
for file in /opt/*
do
echo $file
done
5.2 利用for循环,将/opt目录下,所有一.txt为结尾的文件合并成一个文件,合并到xy102.txt
for file in /opt/*.txt
do
cat $file >> /opt/xy102.txt
done
5.3 测试一个网段,c类的私有地址,32位的网段,测试可以ping通的保留到/opt/host.txt,ping不通,提示不通即可,1~254
read -p "请输入一个网段的开头(192.168.100.):" ip
for i in {1..254}
do
{
ping -c 2 $i$ip &> /dev/null
if [ $? -eq 0 ]
then
echo "$ip$i is onine"
echo "$ip$i >> /opt/host.txt "
else
echo "$ip$i in offline"
fi
}&
#把整个循环体的代码看作一个整体内容,相当于并行,&循环成立的内容放入后台执行
done
wait
#wait的执行结束之后,直接突出,并发执行
5.4 输入整数,用+、-、*、/、%进行运算
while true
do
read -p "输入第一个数字:" num1
read -p "输入运算符号(+、-、*、/、%)" fh
read -p "输入第二个数字:" num2
if [ "$fh" == "+" ]
then
echo "结果为:$(($num1+$num2))"
elif [ "$fh" == "-" ]
then
echo "结果为:$(($num1-$num2))"
elif [ "$fh" == "*" ]
then
echo "结果为:$(($num1*$num2))"
elif [ "$fh" == "/" ]
then
if [ $num2 -eq 0 ]
then
echo "除数不能为零"
else
echo "结果为:$(($num1/$num2))"
fi
fi
5.5 我们定义好一个密码,脚本判断密码输入是否正确,正确的密码是123456,输入正确,提示正确,输入3次,3次错误,密码被锁定
i=1
psd="123456"
while [ $i -le 3 ]
do
read -p "请输入密码:" key
if [ "$key" == "$psd" ]
then
echo "密码正确"
exit
else
echo "输入错误"
let i++
fi
done
echo "密码输入超过3次,已锁定"