Shell(5)------shell的循环控制语句

发布时间:2024年01月19日

shell的循环控制语句

插播!插播!插播!亲爱的朋友们,我们的shell课程上线啦!感兴趣的小伙伴可以去下面的链接学习哦~

Shell入门——基础知识+实战_在线视频教程-CSDN程序员研修院

在shell脚本中,循环控制语句起着至关重要的作用,它们可以帮助我们高效地执行重复的任务。例如,遍历目录中的文件,对每个文件进行处理;或者使用循环从文本文件中逐行读取数据,并对数据进行处理。此外,我们还可以通过循环等待某个条件满足后再退出循环,例如等待某个进程执行完毕。这样一来,循环控制语句就成为了我们编写shell脚本时不可或缺的工具。

在众多的循环控制语句中,主要包括以下四种:if循环语句、for循环语句、case循环语句和while循环语句。接下来,我们将分别介绍这四种循环控制语句的使用方法和应用场景。

1. if循环语句

首先,我们需要了解什么是if循环语句。在shell脚本中,if循环语句是一种条件判断工具,它根据给定条件的真假来执行不同的操作。这种语句广泛应用于各种场景,如操作系统、编程语言等,以便在满足特定条件时执行特定任务。

接下来,我们将重点讨论两类if循环语句:单分支循环和多分支循环。单分支循环包含一个条件判断,基本语法如下:

if [ 条件判断 ];
????then
????操作1
else
????操作2
fi

当条件判断结果为真时,即条件成立,脚本将执行操作1。如果条件判断结果为假,执行操作2。在这种情况下,我们可以省略else分支,因为只有当条件成立时,才会执行相应的操作。

在编程中,我们经常会遇到需要判断一个数是否为奇数或偶数的情况。那么,如何使用if循环语句来判断一个数是否为奇数呢?接下来,我们将详细介绍如何实现这一功能。

首先,我们可以运用之前所学的基础知识,通过将变量num除以2来与0进行比较。我们可以使用-eq命令来进行整数判断。如果num除以2的结果与0相等,即能整除,那么这个数就是偶数;否则,这个数就是奇数。

以下是一个简单的示例代码:

在这个示例中,我们首先使用read命令读取用户输入的整数,并将其存储在变量num中。然后,我们使用if循环语句和百分号操作符%(用于取模运算)来判断num是否为奇数。如果num除以2的余数为0,即能整除,我们就输出“num是偶数”;否则,输出“num是奇数”。

执行后输入数字可以呈现效果:

在编写程序时,我们经常需要基于不同的条件执行不同的操作。这可以通过使用多分支循环来实现。在shell脚本中,if语句提供了多分支循环的功能,可以根据不同的条件判断执行不同的命令或操作。这种结构使得程序更加智能和灵活,可以根据不同的条件做出不同的响应。

多分支循环的基本语法如下:

if [ 条件判断 ];
????then
????执行动作
elif [ 条件判断 ];
????then
????执行动作
elif [ 条件判断 ];
????then
????执行动作
fi

在这个语法中,每个条件判断都是一个逻辑表达式,如果表达式的值为真,则执行相应的动作。如果所有条件判断都不成立,则执行else后面的动作。需要注意的是,每个条件判断和对应的动作都是可选的,可以根据实际需求进行添加或省略。

多分支循环在shell脚本中有很多应用场景。例如,我们可以根据不同的参数执行不同的命令或操作不同的文件。此外,我们还可以在用户输入时根据不同的选项执行不同的操作。这种结构使得程序更加智能和灵活,可以根据不同的条件做出不同的响应。

在使用多分支循环时,需要注意以下几点。首先,条件判断必须是有效的逻辑表达式,不能是无效或不合法的。其次,执行的动作应该正确无误,以确保程序的正常执行。此外,为了避免代码冗余,我们可以将相似的分支合并,减少重复代码的出现。最后,我们应该尽量保持代码的可读性和可维护性,以便其他人能够轻松地理解和修改程序。

例如我们可以写一个shell脚本使用if多分支循环判断一个数的范围:

我们使用 read 命令读取用户输入的数,然后使用 if 的多分支循环判断该数的范围,并输出对应的提示信息。首先判断输入的数是否小于0,小于零则输出是负数,否则继续判断输入的数是否等于0,等于0 则输出是零,否则继续判断是否大于或等于0和小于等于100,是的话输出在1到100之间,否则输出大于100,这样我们就经过了三次判断,并根据实际情况输出不一样的结果。

执行后呈现这样的效果:

2.?for循环控制语句

在shell脚本中,针对需要执行重复任务的情况,循环结构,尤其是for循环结构,是一种高效的代码优化方法。它有助于降低冗余代码的出现,使程序变得更加简洁和高效。在for循环结构中,变量代表列表中的每一个元素。借此,在循环过程中,我们可以对这些元素执行各种操作,或将它们作为参数传递给函数调用,从而实现对列表中元素的处理。

在shell脚本中,for循环语句的语法结构如下:

for variable in list
do
????command
done

在此结构中,`for ?variable ?in ?list`用于设定循环变量及列表。其中,`variable`乃是所定义的循环变量,其在每次循环过程中,都将被赋予列表中的一个元素。而 ?`list`则充当循环列表,可为一数组或采用通配符定义的一组文件名。`do`标志着循环的开始,而 ?`done`通常与 ?`do`配合使用,形成循环语法结构。位于 ?`do` ?与 ?`done`之间的代码块将被循环执行。在每次执行循环体之前,循环变量 ?`variable`将被赋予列表中的一个元素,随后执行 ?`command`。

以下是一个关于for循环的示例,假设我们需要实现从1遍历到5,并在每次循环中输出当前数字,可以使用如下for循环语句:

其中,for语句中的变量i将被赋值为1、2、3、4、5,然后在循环体中使用echo命令输出变量i的值。在循环执行完成后,脚本将会退出。执行这个脚本将会产生以下输出:

如此赋值尽管在代码整体上可能不够高级,但实际上在shell中也能实现与C语言类似的循环。首先初始化循环变量,接着判断循环变量是否满足条件。若满足条件,则执行do部分中的语句。执行完do中的语句后,循环变量会进行增量操作,然后再次判断循环变量是否满足条件。若满足,则继续执行do中的语句,以此类推,直至循环变量不满足条件,此时循环结束。以下举例输出1到5:

这样同样可以达到效果。

在shell脚本中,for循环控制语句主要用于控制循环次数,从而影响整个脚本的执行流程。通过巧妙地运用这些语句,我们可以在满足某个条件时跳出整个脚本或函数执行,实现对执行流程的灵活控制。

for循环语句中的break和continue是两个控制循环次数的关键语句。break语句的作用是当某一条件满足时,立即跳出当前循环。这意味着,一旦break语句被触发,循环立即终止,不再执行循环内剩余的语句。相反,continue语句的作用是跳过本次循环,直接进入下一次循环。这可以在满足特定条件时,避免对某些数据或文件进行处理,提高脚本的执行效率。

例如,假设我们有一个脚本,用于处理一系列文件。在这个过程中,我们可能需要检查文件类型、大小、创建时间等属性。如果某个文件不符合我们的处理要求,我们可以使用break语句跳出循环,从而避免对该文件进行不必要的处理。同样,我们也可以使用continue语句跳过本次循环,继续处理下一个文件,直到满足条件的文件被找到。

它的语法格式是这样的:

for variable in list
do
????if [ condition ]
????then
????????break
????fi
????command
Done

将break替换为continue表示不退出循环,仅结束当前循环。为了更直观地解释这一概念,我们以一个实例为例进行说明。假设我们需要在一串无规律的数字中寻找数字8,并在找到8后跳出整个循环,我们可以如何利用for循环实现这一目标呢?

我们设定了一组数字列表:2,4,6,7,15,8,10。通过循环结构,我们遍历了列表中的每一个元素。在循环体中,我们嵌入了一个if语句。当循环遇到等于8的数字时,if语句的条件成立,执行break语句,使循环提前结束。若条件不满足,则打印该数字。循环结束后,程序将输出一条信息:“Done!”以示整个程序已完成。

3. case循环控制语句

在shell脚本中,case循环是一种常用的多重分支结构,它与 ?if语句有着明显的区别。if语句可以判断多个条件,而case语句一次只能判断一种条件。这种专一性的设计使得 ?case语句在某些场景下更为便捷和高效。

case语句的工作原理是:首先根据变量的值进行匹配,一旦匹配成功,就会执行对应的语句。每个模式后面都必须跟一个右括号“)”符号,以表示模式的结束。而每个模式匹配完毕后,还需加上两个分号“;;”,表示接下来的语句属于另一个模式匹配。

语法格式如下:

case 变量 in
????模式1)
????????command1
????????;;
????模式2)
????????command2
????????;;
????...
????*)
????????commandN
????????;;
esac

以下是一个关于case语句应用的示例:根据用户输入的数字,输出相应的星期几。当输入数字1-7时,分别输出“星期一”至“星期日”;若输入其他数字,则输出“输入错误,请输入数字1-7”。

执行后,控制台呈现“请输入数字(1-7):”提示;用户输入一个数字并按下回车键;case语句对输入的数字进行匹配,若匹配成功,则执行相应语句,若匹配失败,则执行最后的星号分支。

4.while循环语句

Shell脚本中的while循环是一种非常实用的条件循环和不定循环。它的特点在于,只要条件判断式成立,循环就会持续进行,直到判断式不成立或者主动选择跳出循环为止。这种循环结构在脚本编写中有着广泛的应用,能够极大地提高脚本的灵活性和实用性。它的基本语法如下:

while [ 条件判断式 ]
do
????执行动作
done

在这个语法中,`condition`代表条件判断式,可以是任意类型的表达式。只要`condition`为真,循环体中的`command`就会一直被执行。直到`condition`为假,循环才会停止。这样的设计使得while循环能够根据实际情况灵活地调整执行流程,满足不同场景的需求。

循环体中的`command`可以是一个或多个命令,这些命令之间需要使用分号或者换行符隔开。这样可以确保每个命令独立执行,避免命令之间的相互影响。

以下是一个简单的示例:

如果我想要这个脚本不断的输出hello world,并在输出10次后终止循环,那我们该怎么做呢?

可以这样写:

在本脚本中,首先设定一个变量count,并将其初始值设为0。随后,通过while循环进行迭代,循环条件为“count小于10”,即在执行循环前,若count小于10,则执行循环体中的语句。循环体包含输出“Hello ?World”的语句以及将count加1的操作。经过10次循环后,count的值将变为10,此时不再满足循环条件,循环从而终止。

输出结果如下:

除此之外,while循环在诸如读取文件(如while ?read ?line)或持续读取输入值等场景中亦具有广泛应用。例如,以下示例展示了如何使用while循环读取文件内容。

在本脚本中,采用while循环逐行读取文件7.txt的内容,并将读取到的每一行赋值给变量line。随后,通过echo语句将line变量输出至控制台,直至文件全部内容被完整读取。在此过程中,“<”符号起到将文件内容作为输入重定向至while循环的作用,使得循环能够读取并处理文件内容。需要注意的是,当文件读取至末尾时,循环将自动终止。

通过这些循环语句,我们可以实现对不同任务的自动化执行。在实际应用中,还可以根据需要灵活组合这些循环结构,以满足更复杂的需求。

总之,掌握Shell脚本的循环执行语句对于提升工作效率和简化日常任务具有重要意义。希望本文的讲解能帮助你更好地理解和应用这些知识,祝你在Shell脚本编程的道路上越走越远!

文章来源:https://blog.csdn.net/IVY_WANG_QAQ/article/details/135680101
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。