Linux+Docer 容器化部署之 Shell 语法入门篇 【Shell 循环类型】

news/2025/2/4 19:44:37 标签: linux, 运维, 服务器, Shell

文章目录

  • 一、Shell 循环类型
  • 二、Shell while 循环
  • 三、Shell for 循环
  • 四、Shell until 循环
  • 五、Shell select 循环
  • 六、总结


在这里插入图片描述

Shell__6">一、Shell 循环类型

循环是一个强大的编程工具,使您能够重复执行一组命令。在本教程中,您将学习以下类型的循环 Shell 程序:

  • while 循环
  • for 循环
  • until 循环
  • select 循环

你会根据不同情况使用不同的循环。例如用 while 循环执行命令,直到给定的条件下是 ture ,循环直到执行到一个给定的条件为 false

有良好的编程习惯,将开始使用情况的基础上适当的循环。这里 whilefor 循环类似在大多数其他的编程语言,如C,C++ 和 Perl 等。

语法:

while command1 ; # this is loop1, the outer loop
do
   Statement(s) to be executed if command1 is true

   while command2 ; # this is loop2, the inner loop
   do
      Statement(s) to be executed if command2 is true
   done

   Statement(s) to be executed if command1 is true
done

嵌套的 while 循环和类似的方式,可以嵌套其他循环的基础上的编程要求下面是一个例子:

例子: 这里是循环嵌套一个简单的例子,让我们添加另一个倒计时循环内的循环,数到九:

#!/bin/sh

a=0
while [ "$a" -lt 10 ]    # this is loop1
do
   b="$a"
   while [ "$b" -ge 0 ]  # this is loop2
   do
      echo -n "$b "
      b=`expr $b - 1`
   done
   echo
   a=`expr $a + 1`
done

这将产生以下结果。

0
1 0
2 1 0
3 2 1 0
4 3 2 1 0
5 4 3 2 1 0
6 5 4 3 2 1 0
7 6 5 4 3 2 1 0
8 7 6 5 4 3 2 1 0
9 8 7 6 5 4 3 2 1 0

注意:重要的是要注意 echo -n 是如何工作。在这里,-n 选项 echo ,以避免打印一个新行字符。

Shell_while__71">二、Shell while 循环

while 循环,使您能够重复执行一组命令,直到某些条件发生。它通常用于当你需要反复操纵的变量值。

语法:

while command
do
   Statement(s) to be executed if command is true
done

这里 Shell 命令进行计算。如果结果值是 true,给定语句被执行。如果命令为 false,那么没有语句将不执行,程序将跳转到 done 语句后的下一行。

例子:
下面是一个简单的例子,使用 while 循环显示数字 0到9

#!/bin/sh

a=0

while [ $a -lt 10 ]
do
   echo $a
   a=`expr $a + 1`
done

这将产生以下结果:

0
1
2
3
4
5
6
7
8
9

解析: 每一次执行这个循环,变量 a 进行检查,看该值是否小于10。如果 a 的值小于10,此测试条件的退出状态为0。在这种情况下,当前值的将显示,然后按1递增。

Shell_for__114">三、Shell for 循环

循环操作项目清单。重复一组命令列表中的每个项目。

语法:

for var in word1 word2 ... wordN
do
   Statement(s) to be executed for every word.
done

解析:
var 是一个变量,word1 到 wordN 是由空格分隔的字符(字)序列的名称。每次for 循环的执行,变量 var 的值被设置为下一个单词的列表中的字,word1 到 wordN 。

例子:
下面是一个简单的例子,它使用 for 循环跨越通过给定的数字列表:

#!/bin/sh

for var in 0 1 2 3 4 5 6 7 8 9
do
   echo $var
done

这将产生以下结果:

0
1
2
3
4
5
6
7
8
9

下面的例子显示所有文件开始 .bashhome 目录。执行这个脚本:

#!/bin/sh

for FILE in $HOME/.bash*
do
   echo $FILE
done

这将产生以下结果:

/root/.bash_history
/root/.bash_logout
/root/.bash_profile
/root/.bashrc

Shell_until__171">四、Shell until 循环

完美的情况下,你需要执行的一组命令某个条件为真时,while 循环执行。有时候,你需要执行一组命令,直到某个条件为真。

语法:

until command
do
   Statement(s) to be executed until command is true
done

解析: 这里 Shell 命令进行评估计算。如果结果值是 false ,给定语句(s)被执行。如果命令没有语句为 true ,那么将不执行,程序会跳转到下一行 done 语句后。

例子:
下面是一个简单的例子,它使用直到循环显示数字0到9:

#!/bin/sh

a=0

until [ ! $a -lt 10 ]
do
   echo $a
   a=`expr $a + 1`
done

这将产生以下结果:

0
1
2
3
4
5
6
7
8
9

Shell_select__213">五、Shell select 循环

select 循环提供了一个简单的方法来创建一个编号的菜单,用户可从中选择。它是有用的,当你需要从列表中选择,要求用户选择一个或多个项目。
语法:

select var in word1 word2 ... wordN
do
   Statement(s) to be executed for every word.
done

解析:
var 是一个变量,word1 到 wordN是由空格分隔的字符(字)序列的名称。每次for循环的执行,变量 var 的值被设置为下一个单词的列表中的字,由 word1 到wordN。

对于每一个选择的一组命令将被执行,在循环中。这个循环在 ksh,并已被改编成的 bash 。这不是在 sh

例子:
下面是一个简单的例子,让用户选择的首选饮品:

#!/bin/ksh

select DRINK in tea cofee water juice appe all none
do
   case $DRINK in
      tea|cofee|water|all) 
         echo "Go to canteen"
         ;;
      juice|appe)
         echo "Available at home"
      ;;
      none) 
         break 
      ;;
      *) echo "ERROR: Invalid selection" 
      ;;
   esac
done

select 循环的菜单看起来像下面这样:

$./test.sh
1) tea
2) cofee
3) water
4) juice
5) appe
6) all
7) none
#? juice
Available at home
#? none
$

您可以更改显示的提示选择循环通过改变变量 PS3 如下:

$PS3="Please make a selection => " ; export PS3
$./test.sh
1) tea
2) cofee
3) water
4) juice
5) appe
6) all
7) none
Please make a selection => juice
Available at home
Please make a selection => none
$

六、总结

关于Shell 循环类型基本和其他语言大差不差,还差一个 循环控制 break/continue 放到下一篇单独介绍吧。


在这里插入图片描述


http://www.niftyadmin.cn/n/5841776.html

相关文章

互联网行业常用12个数据分析指标和八大模型

本文目录 前言 一、互联网线上业务数据分析的12个指标 1. 用户数据(4个) (1) 存量(DAU/MAU) (2) 新增用户 (3) 健康程度(留存率) (4) 渠道来源 2. 用户行为数据(4个) (1) 次数/频率…

【C语言篇】“三子棋”

一、游戏介绍 三子棋,英文名为 Tic - Tac - Toe,是一款简单而经典的棋类游戏。游戏在一个 33 的棋盘上进行,两名玩家轮流在棋盘的空位上放置自己的棋子(通常用 * 和 # 表示),率先在横、竖或斜方向上连成三个…

通信方式、点对点通信、集合通信

文章目录 从硬件PCIE、NVLINK、RDMA原理到通信NCCL、MPI原理!通信实现方式:机器内通信、机器间通信通信实现方式:通讯协调通信实现方式:机器内通信:PCIe通信实现方式:机器内通信:NVLink通信实现…

Rust枚举(Enum)完全指南:用类型安全表达多样性

枚举(Enum)是Rust类型系统的核心特性之一,它不仅能够表示简单的选项集合,还能携带复杂数据,配合模式匹配实现强大的逻辑控制。本文将通过具体示例,深入解析Rust枚举的完整用法。 一、基础枚举定义 1.1 简单…

Java | CompletableFuture详解

关注:CodingTechWork CompletableFuture 概述 介绍 CompletableFuture是 Java 8 引入的一个非常强大的类,属于 java.util.concurrent 包。它是用于异步编程的一个工具,可以帮助我们更方便地处理并发任务。与传统的线程池或 Future 对比&…

Vue-data数据对象

目录 一、Vue中的data数据对象是什么?二、data支持的数据类型有哪些? 一、Vue中的data数据对象是什么? Vue中用到的数据定义在data中。 二、data支持的数据类型有哪些? data中可以写复杂类型的数据,渲染复杂类型数据…

PyQt4学习笔记1】使用QWidget创建窗口

目录 一、创建一个简单的 QWidget 窗口 二、设置窗口属性 1. 设置窗口标题 2. 设置背景颜色 3. 设置窗口大小和位置 4. 设置窗口模式 5. 关闭窗口 6. QWidget 及其子控件的样式 三、添加控件到 QWidget 1. 添加按钮 2. 添加标签 3. 添加文本框 4. 控件布局管理 四、自定义样式 …

【协议详解】卫星通信5G IoT NTN SIB32-NB 信令详解

一、SIB32信令概述 低轨卫星的移动性会导致地面用户设备覆盖不连续,为了解决这一问题,3GPP引入了SystemInformationBlockType32(SIB32)信令,为非连续覆盖预测提供卫星辅助信息。地面设备可以基于SIB32信令中的信息&am…