循环语句for
for循环
循环和遍历的概念
循环(Loop)和遍历(Traversal)是两个在计算机编程中经常使用的概念。
循环是一种重复执行一段代码的结构。通过循环,可以在满足一定条件的情况下,多次执行相同的代码。循环语句通常包括一个循环体(Loop Body)和一个循环条件(Loop Condition),当循环条件满足时,循环体会被执行,否则循环结束。
遍历是指对一组数据结构中的每个元素进行一次访问的过程。在计算机编程中,常常需要对数组、列表、树等数据结构中的每个元素进行遍历,
以便对它们进行操作或者输出。
循环是一种控制流程的结构,用于重复执行一段代码,而遍历是一种数据操作的过程,用于访问并处理数据结构中的每个元素。在某些情况下,循环和遍历可以结合使用,以便在循环中遍历数据结构并对其进行操作。
循环(Loop)是计算机编程中非常重要的一种结构,其主要目的是为了简化代码编写,提高代码的重复利用率,以及提高程序的效率。
以下是使用循环的一些好处:
- 重复执行代码:通过使用循环,可以在程序中重复执行一段代码,从而避免代码的重复编写,减少程序代码量,提高程序的可读性和可维护性。
- 简化程序逻辑:使用循环可以使程序逻辑更加简洁明了,提高程序的可读性和可理解性,降低代码出错的可能性。
- 提高代码的重复利用率:通过将重复的代码封装在循环结构中,可以提高代码的重复利用率,减少代码冗余。
- 提高程序的效率:循环可以让程序自动化地执行重复任务,从而减少人工干预的次数,提高程序的效率和性能。
for语句的结构
读取不同的变量值,用来逐个执行同一组命令-------》即遍历
一般格式
for 变量名 in 取值列表
do
命令序列
done
实验1.1 :
实验1.2
实验1.3
类c语言格式
for (( 表达式1; 表达式2; 表达式3 ))
do
命令序列
done
#表达式1:定义变量并赋值
#表达式2:决定是否循环/变量的范围
#表达式3:决定循环变量如何改变,决定循环什么时候结束
实验2
实验1.4
1累计加到100
拓展:for语句死循环:即无法退出循环
- 简单的一个for死循环表达方式
for ((;;))
do
命令序列
done
#括号里面固定格式
常用转义字符
echo -n 表示不换行输出
echo -e 输出转义字符,将转义后的内容输出到屏幕上 echo -ne
只有加了-e才能执行下面的转义符:
常用的转义字符如下:
\b | 转义后相当于按退格键(backspace),但前提是"\b"后面存在字符;“\b"表示删除前一个字符,”\b\b"表示删除前两个字符。 |
\c | 不换行输出,在"\c"后面不存在字符的情况下,作用相当于 echo -n; 但是当"\c"后面仍然存在字符时,"\c"后面的字符将不会被输出。 |
\n | 换行,被输出的字符从"\n"处开始另起一行。 |
\f | 换行,但是换行后的新行的开头位置连接着上一行的行尾; |
\v | 与\f相同; |
\t | 转以后表示插入tab,即横向制表符; |
\r | 光标移至行首,但不换行,相当于使用"\r"以后的字符覆盖"\r"之前同等长度的字符;但是当"\r"后面不存在任何字符时,"\r"前面的字符不会被覆盖 |
“ \ \ " 双斜杠 | 表示插入" \ "本身; |
实验3.1: -n不换行输出
实验3.2:
for循环嵌套结构
for 变量名 in 取值列表
dofor 变量名 in 取值列表do命令序列done
命令序列
done
跳出循环
在循环中使用 break 和 continue 命令时,它们分别有以下作用:
-
break:在循环内部,当执行到 break 命令时,会立即跳出当前的循环,停止循环执行,然后继续执行下一条指令。
可以使用 break 命令来提前终止循环,例如当达到特定条件时或者已经执行了足够的次数。 -
continue:在循环内部,当执行到 continue 命令时,会跳过本次循环剩余的代码,并继续下一次循环。
可以使用 continue 命令来跳过循环中的某些操作,例如在特定条件下跳过一次循环,或者只执行符合条件的循环。 -
在嵌套循环中,可以在 break 和 continue 命令后面指定数字参数,来指定跳出或跳过多层循环。
例如,break 2 会跳出终止当前循环和外层循环的迭代,而continue 2会跳过当前循环和两层外层循环的迭代。 -
break和continue命令是控制循环流程重要命令。
continue
表示满足continue条件时跳出循环,但是不影响后续循环执行
它的作用是在循环内部跳过本次循环并继续下一次循环
break
在循环内部,当执行到 break 命令时,会立即跳出当前的循环,停止循环执行,然后继续执行下一条指令。
拓展,在for语句的嵌套结构中continue 2 的意思
-
设置简单的for语句嵌套结构
-
执行结果
-
原理
continue默认为continue 1 ,当continue为默认值时,此时只会跳过内循环中的本次循环,后面循环不受影响,外循环也不受影响
当continue 2 时,此时内循环和外循环均会受到影响,此时continue 2 会跳出本次内循环同时跳出外层循环,从外层循环处满足条件后继续向后执行下一次循环,即在两层循环内部执行
拓展,在for语句的嵌套结构中break 2 的意思
- 设置简单的for语句嵌套结构
- 执行结果
- 原理
break默认为break 1 ,当break为默认值时,此时只会结束内循环,外循环也不受影响。
当break 2 时,此时内循环和外循环均会受到影响,此时break 2 会同时终止内循环和外循环。
拓展,exit的作用
遇到exit语句的时候脚本直接结束。
1)系统是有exit命令的,用于退出当前用户的登录状态
2)在shell脚本中,exit语句是用来退出当前脚本的。也就是说在shell脚本中, 只要碰到exit语句,后续的程序就不再执行,而直接退出脚本。
3)在shell脚本中,exit后面加上非0数字,代表返回的值,在默认情况下,即exit后面不根数字,脚本退出后。echo $?
值为0,而exit后面加上数字后,就会返回对应的值,即exit 1
脚本退出后echo $?
的值就为1。
如何提高脚本的运作效率
while
重复测试某个条件,只要条件成立则反复执行
while有些情况下可以和for直接替换使用
定义变量值
while 条件测试操作
do
命令序列
变量的迭代方式
done
简单的脚本:输出10遍helloworld
n=10
while(n>0)
doprintf("helloworld")let n--
done
逻辑关系:
until
重复测试某个条件,只要条件不成立则反复执行,一旦判断条件成立,就终止循环.
until 条件测试操作
do
命令序列
变量的迭代方式
done
简单的until循环:1加到100
#!/bin/bash
i=1
sum=0
until (( i>100 ))
do((sum+= i))((i++))------------#变量的迭代方式
done
echo "This sum is: $sum"
逻辑关系:
用脚本实现write 用户名 消息内容
来给用户发送消息
- 拓展,购物,到一家店里买东西,统计一共花了多少钱,逛了几家店
- 拓展 菲波拉切数(从第三项开始,等于前两项的和)
要求,写出前10个数
- 拓展猴子吃香蕉:猴子摘下了n个香蕉,当天吃掉一半多一个,第二天也是吃掉剩下香蕉一半多一个,到了第十天,香蕉只剩下了1个,求n
实验
生成随机密码
1对字符串进行分片
- 得出字符串长度
- 求出a的随机下标
- 求出下标对应的数
显示出变量中的具体的值
- 追加值
这条命令可以替代num=$num$b
num+=$b
- 生成8位数的密码
获取指定字符串方法
- awk
- 字符串下标分片
- %% 和 ## 和 % 和 #
while read 循环读取文件里面的内容
cat -n 文件名
- for
while read 变量名
重定向
cat 123.txt | while read d
管道符
实验如何将长文件按照固定行数分割为多个子文件(记得备份源文件)
- 查看IFS
计算从1到100所有整数的和
提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和
求从1到100所有整数的偶数和、奇数和
用户名存放在users.txt文件中,每行一个,判断文件里的用户是否存在,若该用户存在,输出提示该用户已存在;用户存在但没设密码,则提示用户并让用户设置密码;若该用户不存在,提示用户输入密码,建立用户并设立其密码
检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中
用户输入密码,脚本判断密码是否正确,正确密码为123456,输入正确提示正确信息,连续输错3次则报警
使用循环语句将一个 0到255 之间的十进制数转换成8位数二进制数
将一个点分十进制格式的IP地址转换成点分二进制格式
比如 255.255.255.255 --> 11111111.11111111.11111111.11111111
假设/opt/test/ 目录中有多个重要文件,编写脚本使用 md5sum 命令一次性判别目录中的文件是否有发生过改动
输出环境变量PATH的目录所包含的所有可执行文件
执行命令 mkdir -p /root/bin/aa/bb/cc/dd ; touch /root/bin/aa/bb/cc/dd/abc.txt,通过脚本输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!