声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页[B站泷羽sec](https://space.bilibili.com/350329294)
在Shell编程中,while 语句用于在给定的条件为真时重复执行某一段代码。其语法格式如下:
while [condition]
do
# commands to be executed as long as the condition is true
done
1. 语法解析
- while: 表示循环的开始,后面跟一个条件。
- [condition]: 这是一个条件表达式,可以是任何有效的测试条件,通常使用 [ 和 ] 来表示条件。条件的返回值决定了是否继续循环。Shell 会根据条件的返回码来判断:如果返回值为 0,则条件为真;如果返回值非 0,则条件为假。
- do: 在条件为真时执行的命令块的开始。
- done: 结束 while 循环的标志。
2. 示例
基本示例
打印数字 1 到 5:
#!/bin/bash
i=1
while [ $i -le 5 ]
do
echo $i
((i++)) # 递增i
done
输出:
解释:
- 初始时,变量 i 的值是 1。
- while 循环检查 i 是否小于等于 5。
- 如果条件为真,则执行 echo $i 打印出当前的数字,并通过 ((i++)) 将 i 的值递增。
- 循环继续直到 i 的值大于 5。
另一个示例:读取用户输入
不断读取用户输入直到用户输入 "exit":
#!/bin/bash
while true
do
echo "请输入一个命令(输入 'exit' 退出):"
read input
if [ "$input" == "exit" ]; then
echo "退出程序。"
break # 使用 break 退出循环
fi
echo "你输入的命令是:$input"
done
解释:
- while true 是一个永真条件,意味着循环会一直执行,直到 break 语句触发退出。
- 每次输入后,通过 read 命令读取用户的输入。
- 如果输入为 "exit",则通过 break 跳出循环。
3. 常见条件表达式
在 while 语句中,条件通常会用到各种测试条件,最常见的有:
- 数值比较:
- -eq 等于
- -ne 不等于
- -gt 大于
- -lt 小于
- -ge 大于或等于
- -le 小于或等于
示例:检查数字是否大于 10:
i=5
while [ $i -le 10 ]
do
echo $i
((i++))
done
- 字符串比较:
- = 检查两个字符串是否相等
- != 检查两个字符串是否不相等
- -z 检查字符串是否为空
- -n 检查字符串是否非空
示例:检查输入字符串是否为 "yes":
while true
do
read -p "Do you want to continue? (yes/no): " answer
if [ "$answer" == "no" ]; then
echo "退出循环"
break
fi
done
4. 结束循环
除了通过条件表达式控制循环结束外,还可以使用以下方法显式地终止循环:
- break:立即退出循环。
- continue:跳过本次循环中的剩余部分,进入下一次循环。
5. while 和文件读取
while 循环常用于逐行读取文件内容:
#!/bin/bash
while read line
do
echo $line
done < input_file.txt
解释:
- read line 会逐行读取文件 input_file.txt,直到文件结束。
- 每次读取一行内容并打印。
6. 退出条件
如果不使用 break,循环会根据条件判断继续进行。当条件不满足时,while 循环自然结束。
总结
- while 循环可以执行重复的任务,直到某个条件变为假。
- 条件的判断依据是命令的退出状态(0 为真,非 0 为假)。
- 可以结合数值比较、字符串比较、文件读取等多种方式灵活使用。
while循环代码1
i=1
while (( $i<=10))
do
ehco $i
((i++))
done
首先通过i=1这一行,将变量i初始化为1,为后续的循环操作确定起始值。
循环条件判断:
while((Si<=10))是循环的条件判断部分。这里使用了双括号(())语法,它用于进行算术表达式的计算和判断。在每次循环开始前,都会检查|的值是否小等宇10。只要这个条件满定,循环体内部的代码就会被执行。
循环体执行内容:
在循环体内部,首先通过echo $i这一行,将当前i的值输出到控制台,这样就可以看到循环过程中;的变化情况。
接着,通过((i++))这一语句对变量i进行自增操作。这里的(C))语法同样用手算运算,1++表示将|的值增加1。每次循环结束后、的值就会比上一次循环时增加1,以便在下次循开始时进行新的条件判断。
while循环代码2
i=1
while (( $i<=10 ))
do
echo $i
let "i++"
done
变量初始化与循环条件判断:
这部分和第一种实现方式完全相同。先是通过i=1初始化变量i,然后通过,while((Si<=10))来判断循环是否继续进行克要i的值小等于10,循环就会持续。
循环体执行内容:
同样,在循环体中首先通过 echo Si输出当前i的值。
不同之处在手对变量;进行自增操作的语句。这里使用了let 命令,let “i++"的作用也是将变量i的值增加1。let 命令用于执行算术运算,它可以接受一个或多个算术表达式作为参数,
并对相关变量进行相应的运算操作。
总的来说,这两种实现方式都能达到通过while 循环输出1到10的整数的目的,只是在对变量进行自增操作时使用了不同的语法形式,但它们的功能是等效的。