一、基本介绍
循环:一种控制流程的结构,用于重复执行一段代码。是计算机编程中非常重要的一种结构,其目的是为了简化代码编写,提高代码的重复利用率,以及提高程序的效率。
遍历:一种数据操作的过程,用于访问并处理数据结构中的每个元素。在某些情况下,循环和遍历可以结合使用,以便在循环中遍历数据结构并对其进行操作。
循环的优点:
- 重复执行代码:通过使用循环,可以在程序中重复执行一段代码,从而避免代码的重复编写,减少程序代码量,提高程序的可读性和可维护性。
- 简化程序逻辑:使用循环可以使程序逻辑更加简洁明了,提高程序的可读性和可理解性,降低代码出错的可能性。
- 提高代码的重复利用率:通过将重复发代码封装在循环结构中,可以提高代码的重复利用率,减少代码冗余。
- 提高程序的效率:循环可以让程序自动化地执行重复任务,从而减少人工干预的次数,提高程序的效率和性能。
二、For循环
用于已知循环次数的场景
1.基本格式
for 变量名(是变量名称不是变量$) in 取值列表
do
命令序列 #若满足循环做什么动作
done # for 循环结束的标志
for ((i=0;i<=5;i++)) #类c语言格式
for i in {1..5} #一般格式
for ((;;)) #死循环格式
2. for循环流程
读取不同的变量值,用来逐个执行同一组命令。
三、for循环语句示例
根据IP地址检查主机状态,存放在 ip.txt 文件中 IP 地址,每行一个;使用 ping 命令检测各主机的连通性。可连通的 IP 地址存放在 ipaddr.txt 文件中。
vim yonghu.sh
for i in $(cat /opt/ip.txt) #变量 i 参数来自 ip.txt 文件
do
ping -c3 -W2 $i &> /dev/null #指定ping三次,超时连接两次后退出。
if [ $? = 0 ]
then
echo "$i" >> /opt/ipaddr.txt #将变量i 重定向写入 ipaddr.txt 文件
echo "$i连接成功"
else
echo "$i连接失败"
fi
done
四、常用的转义字符
echo -n #表示不换行输出
echo -e #输出转义字符,将转义后的内容输出到屏幕上
只有加上 -e 才能执行下面的转义符:
\b | 转义按了退格键,前提是 \b 后面存在字符;\b 表示删除前一个字符,\b\b表示删除前两个字符 |
\c | 不换行输出,在 \c 后不存在字符相当于 echo -n ;当 \c 后存在字符,后面字符不输出 |
\n | 换行,被输出的字符从 \n 处开始另起一行 |
\f | 换行,但换行后的新行的开头位置连接着上一行的行尾 |
\v | 与 \f 相同 |
\t | 表示插入tab,即横向制表符 |
\r | 光标移到行首,但不换行 |
\\ | 表示插入 \ 本身 |
五、跳出循环
1.continue跳出循环
表示满足continue条件时跳出循环,但是不影响后续循环执行;它的作用是在循环内部跳出本次循环并继续下一次循环。
continue 2 是一个shell 中的控制结构,它的作用是在循环内部跳过本次循环并继续下一次循环,而且会跳过两层循环,即在两层循环内部执行。
在嵌套循环中,如果我们使用 continue 2 命令,它将跳过包含它的内层循环和外层循环的迭代,并继续执行下一次外层循环的迭代。
示例:
#! /bin/bash
for j in {1..3}
do
for i in {1..5} #for循环5次从1到5
do
if [ $i -eq 3 ] #if判断语句,若$i=3则执行then的内容
then
continue #结束if语句
fi
echo "$i" #每执行一次就输出一次$i
done
done
~
2.break跳出循环
break循环直接结束此次循环,但是不影响外边嵌套的循环。
break 2 表示结束自己所在循环和外边嵌套的一层循环,break 3 表示结束自己所在循环和外面嵌套的2层循环。
示例:
#! /bin/bash
for j in {1..3}
do
for i in {1..5}
do
if [ $i -eq 3 ]
then
break
fi
echo "$i"
done
done