Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说While & For 循环,希望能够帮助你!!!。
可以将 While 循环称为 "条件循环"
# 条件为 true 就执行循环体代码,条件变为 false 循环结束
while 条件
do
命令1
命令2
命令3
...
done
# 示例
#!/bin/bash
count=0
while [ $count -lt 5 ]
do
echo $count
let count++ # 5
done
# 条件为 false 就执行循环体代码,条件变为 true 循环结束
until 条件
do
命令1
命令2
命令3
...
done
# 示例
#!/bin/bash
count=0
until [ $count -eq 5 ]
do
echo $count
let count++ # 5
done
#!/bin/bash
count=0
while [ $count -lt 5 ] # 1 < 5
do
if [ $count -eq 3 ];then
# break
let count++
continue
fi
echo $count
let count++ # 3
done
总结:结束 while 循环的两种方案
①. — 在循环体代码中把某个值改掉,让 While 循环条件变为假
[root@zzzwqh wqh05]# cat test.sh
#!/bin/bash
count=0
while [ $count -lt 3 ]
do
echo 1111
count=100
echo 2222
echo 3333
done
# 此时循环体内代码会执行完,之后结束脚本
[root@zzzwqh wqh05]# ./test.sh
1111
2222
3333
[root@zzzwqh wqh05]#
②. — break,直接退出本层 While 循环
[root@zzzwqh wqh05]# cat test.sh
#!/bin/bash
count=0
while [ $count -lt 3 ]
do
echo 1111
#count=100
break
echo 2222
echo 3333
done
# 此时循环体内代码不会执行完,break 后的代码不会执行
[root@zzzwqh wqh05]# ./test.sh
1111
[root@zzzwqh wqh05]#
③. — 延伸,多层嵌套时,设置相同 While 循环条件,退出循环时,一起退出
# 正常情况下,break 结束嵌套多层的循环,要写很多层
while 条件1
do
while 条件2
do
while 条件3
do
break
done
break
done
break
done
# 把条件改为 false
tag=true
while $tag
do
while $tag
do
while $tag
do
tag=false
done
done
done
[root@zzzwqh wqh05]# cat check_web.sh
#!/bin/bash
[ $# -ne 1 ] && echo "只能输入一个参数" && exit
url=$1
count=0
while true
do
echo "=========>$count"
if [ $count -eq 3 ];then
echo "报警:$url is dead"
break
fi
wget --timeout=1 --tries=3 $url -q
if [ $? -eq 0 ];then
echo "$url is ok"
break
else
let count++
fi
done
[root@zzzwqh wqh05]#
[root@zzzwqh wqh05]# ./check_web.sh
只能输入一个参数
[root@zzzwqh wqh05]# ./check_web.sh www.baidu.com
=========>0
www.baidu.com is ok
[root@zzzwqh wqh05]# ./check_web.sh www.zzzwqh.com.cn
=========>0
=========>1
=========>2
=========>3
报警:www.zzzwqh.com.cn is dead
[root@zzzwqh wqh05]# cat 6.sh
#!/bin/bash
while read line
do
echo $line
done < a.txt
[root@zzzwqh wqh05]# ./6.sh
11111 1:1 1
22222
3333
4444
[root@zzzwqh wqh05]#
[root@zzzwqh ~]# while :;do free;sleep 0.5;clear;done
可以将 For 循环称为 "取值循环"
for i in value1 value2 value3
do
echo $i
done
# 示例
[root@zzzwqh wqh05]# cat example.sh
#!/bin/bash
for i in "aaa" 222 "ccc"
do
echo $i
done
# 取范围
[root@zzzwqh wqh05]# example.sh
#!/bin/bash
for i in {5..1}
do
echo $i
done
for i in {a..z}
do
echo $i
done
# 语法格式
#!/bin/bash
for ((i=0;i<3;i++))
do
echo "命令1"
echo "命令2"
echo "命令3"
done
# A-Z 忽略 C
[root@zzzwqh wqh05]# cat 9.sh
#!/bin/bash
for i in {A..Z}
do
if [ $i == "C" ];then
# break
continue
fi
echo $i
done
[root@zzzwqh wqh05]#
[root@k8s-master 828]# cat file_type_sum.sh
#!/bin/bash
path=$1
block_type=0
regular_type=0
symbolic_type=0
directory_type=0
character_type=0
[ $# -ne 1 ] && echo "需要指定一个目录" && exit
for i in `ls $path`
do
[ -b /$path/$i ] && let block_type++
[ -L /$path/$i ] && let symbolic_type++
[ -d /$path/$i ] && let directory_type++
[ -f /$path/$i ] && let regular_type++
[ -c /$path/$i ] && let character_type++
done
echo "块文件:$block_type"
echo "普通文件:$regular_type"
echo "软链接文件:$symbolic_type"
echo "目录文件:$directory_type"
echo "字符设备文件:$character_type"
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章