[Linux] shell脚本之循环

一、循环定义

一组被重复执行的语句称之为 循环体,能否继续重复,决定循环的终止条件。 循环语句 是由循环体及循环的终止条件两部分组成的。

二、for循环

2.1 带列表循环

语法
for 变量名 in 取值列表

do  

命令序列  

done

花括号用法:

花括号{ }和seq在for循环的应用:
for i in {1..10..2} 1-10的奇数
for i in {0..10..2} 1-10的偶数
for i in {10..1}  1-10倒序排列

for i in $(seq 10)  1-10正序排列
for i in $(seq 10 -1 1) 1-10倒序排列
for i in $(seq 1 2 10) 1-10的奇数,中间为步长

 运用演示1:列表打印

   需求:打印一份一到十的数字列表

#!/bin/bash
 
for i in {1..10}
do
echo $i
done

运用演示二:分类打印

需求:打印一份 0-10以内的奇数列表

for i in {1..10..2}
do
echo $i
done

脚本
#!/bin/bash
for i in {1..10..2}
do
echo $i
done

 

 需求二:打印一份0-10以内的偶数列表

for i in {0..10..2}
> do
> echo $i
> done
 

用脚本写
#!/bin/bash
for i in {0..10..2}
do
echo $i
done

 

运用演示三:累加求和 

需求:求从1加到10的和 

sum=0
for i in {1..10}
> do
> sum=$[sum+i]
> done
echo $sum
55

脚本求1加到100的和
#!/bin/bash
i=0
sum=0
for i in {1..100}
do
sum=$[sum +i]
let i++
done
echo $sum

 

 2.2 不带列表循环

语法
for 变量名 
do
命令
done

 运用演示:打印hello

#!/bin/bash
for i
do
echo hello
done

注意:脚本需要执行权限,i也要赋予一个值 

2.3 类似c语言格式的循环

语法
for ((表达式1;表达式2;表达式3))
do
命令
done
表达式1:定义变量并赋值

表达式2:决定是否循环

表达式3:决定循环变量如何改变,决定循环什么时候结束

配合命令let使用

++	自身变量+1
--  自身变量-1
+=5	自身变量+5
-=5	自身变量-5
*=5	自身变量*5
/=5	自身变量/5
%=5	自身变量%5

运用演示:从1+到100

#!/bin/bash
i=0
sum=0
for ((i=0;i<=100;i++))
do
sum=$[sum+i]
done
echo $sum

三、while 循环

3.1 while 语法结构

语法
while   [ 判断条件] 使用while循环满足条件执行do,不满足不执行 

do       

执行动作   while循环执行动作

done         while循环结束标志

应用演示:求和

#!/bin/bash
i=0
sum=0
while [ $i -le 100 ]
do
sum=$[sum+i]
let i++
done
echo $sum

3.2 死循环语句

1.while  [1  -eq  1]   判断条件写一个永久为真的条件 

    do       一直执行do内的命令

    done

2.while  true        直接写判断条件为真

    do       一直执行do内的命令

    done

3.while :         判断条件为冒号也表示死循环

    do       一直执行do内的命令 

    done

四、双重循环及跳出循环

4.1 双重循环的机制

单层循环:执行命令从上至下依次执行命令,进行条件判断,如果没有达到退出循环的要求,

便再次进行该操作

双重循环:循环中嵌套循环(在这里我们将外面的循环称作外部循环,嵌套在里面的叫内部循环)

当外部循环执行一次时,内部循环就要将自身的所有循环进行一遍,一整个双重循环结束后,内部循环执行的次数等于自己本身循环的所有次数乘以外部循环的所有循环次数

运用演示:

#!/bin/bash
 
#这是一个双重循环的测试实验
 
for ((i=1;i<=5;i++))
do
  echo "=============这是外部循环执行的第 $i 次==================== "
  for  ((j=1;a<=5;j++))
  do
  echo  "这是内部循环执行的第 $j 次" 
  done
done

打印九九乘法表

#!/bin/bash
for((i=1;i<=9;i++))
do
  for((j=1;j<=i;j++))
  do
  echo -e "${i}*${j}=$[i*j]\t\c"
  done
echo
done

4.2 跳出循环

        break跳出单个循环 break n 数字数字是几代表跳出n层循环

        continue终止某次循环中的命令,但是不会完全终止命令

        exit 直接退出脚本

4.2.1 continue跳出循环 

1.表示满足continue条件时跳出循环,但是不影响后续循环执行

举例:
vim test1.sh         #创建脚本a.sh
脚本内容:
#!/bin/bash
for i in {1..10}  #for循环10次从i=1开始到i=10    
do
if [ $i -eq 3 ]  #if判断语句,若$1等于3则执行then的内容
then 
continue         #当$i=3时跳出循环但不影响后面循环  
fi               #结束if语句
echo $i        #没执行一次for循环输出一次$i
done             #for循环结束语句
bash test1.sh        #调用shell执行脚本
输出结果
1
2
4
5
6
7
8
9
10

4.2.2 break跳出循环

在某个循环中遇到break直接结束此次循环,但是不影响外边嵌套的循环。

break  [数字] 结束数字中的几次循环,若为2则结束自己所在循环和外边嵌套的一层循环,若为3则结束自己所在循环和外边嵌套的2层循环

举例:
vim   a.sh     #创建a.sh脚本
脚本内容:
#!/bin/bash
for j in {1..3}      #第一层for循环,j=1,2,3各执行一次do的内容
do                   #第一层for循环的执行内容
    for i in {1..5}  #第二层for循环,i=1,2,3,4,5各执行一次do的内容
    do               #第二层for循环的执行内容  
        if [ $i -eq 3 ]  #第二层for循环中添加的if判断语句,当$i=3是执行then内容
        then                
        break            #第二层for循环判断语句执行命令,break结束循环
        fi               #if语句结束
    echo "$i"            #第二层for循环语句执行每循环一次输出$i
    done                 #第二层for循环语句结束标志                
done                     #第一层for循环语句结束标志
bash a.sh                #调用bash执行a.sh脚本
执行结果:第二层执行在$i=3是结束了循环,所以只能输出1和2,第一层for循环是循环3次,所以输出了3次。
1
2
1
2
1
2

4.2.3 exit跳出脚本
#!/bin/bash
for j in {1..3}      #第一层for循环,j=1,2,3各执行一次do的内容
do                   #第一层for循环的执行内容
    for i in {1..5}  #第二层for循环,i=1,2,3,4,5各执行一次do的内容
    do               #第二层for循环的执行内容  
        if [ $i -eq 3 ]  #第二层for循环中添加的if判断语句,当$i=3是执行then内容
        then
        #break            #第二层for循环判断语句执行命令,break结束循环
        exit               第二层for循环判断语句执行命令,exit结束循环
        fi               #if语句结束
    echo "$i"            #第二层for循环语句执行每循环一次输出$i
    done                 #第二层for循环语句结束标志                
done                     #第一层for循环语句结束标志

 五、until循环

until循环与for,while循环不同的是,until循环是只要条件不符合就会一直循环,直到条件符合后才会退出循环

语句格式:

until 条件测试操作  

do    

命令序列  

done 

运用演示:求和

#!/bin/bash
i=0
sum=0
until [ $i -gt 100 ]
do
sum=$[sum+i]
let i++
done
echo $sum

总结:

1. 掌握好三种循环的用法(特别是until和前两种循环对于条件判断是相反的) 

2.for循环读取文件时,如果遇到未按照默认分隔符隔开的文件,可以通过修改分隔符来实现正常读取(但是先备份分隔符的默认值,再进行修改,最后进行还原)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/176965.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

虚拟摇杆OnJoystickMove未被调用,角色不移动

更改interaction type 为 event notification

spring-boot-admin-starter-server监控springboot项目

文章目录 场景实现具体操作展示 场景 监控三件套Prometheus、Grafana、Alertmanager 部署起来太复杂,如果公司没有运维而且项目很小就可以使用spring-boot-admin-starter-server替代。这个包使用起来还是很简单的, 下面就实现一个对springCloud项目的监控 实现 参考 项目 具体操…

表格制作软件排行榜,热门做表格的软件推荐

在数字化时代&#xff0c;表格不仅仅是企业管理和数据整理的重要工具&#xff0c;更是学术研究、项目规划以及日常生活中必不可少的一部分。为了更高效地进行表格制作&#xff0c;选择一款优秀的表格制作软件是至关重要的。在众多的软件中&#xff0c;我们特别推荐一款备受好评…

在Jupyter Lab中使用多个环境,及魔法命令简介

一、Jupyter Lab使用conda虚拟环境 1、给虚拟环境添加 ipykernel 方法一: 创建环境时直接添加ipykernel 方法&#xff1a;conda create -n 【虚拟环境名称】python3.8 ipykernel实例如下&#xff1a; conda create -n tensorflow_cpu python3.8 ipykernel 方法二&#xff…

Spring Boot 邮件发送(五种类型的邮件)

邮件协议&#xff1a; SMTP、POP3、IMAP SMTP 协议全称为 Simple Mail Transfer Protocol&#xff0c;译作简单邮件传输协议&#xff0c;它定义了邮件客户端软件与 SMTP 服务器之间&#xff0c;以及 SMTP 服务器与 SMTP 服务器之间的通信规则。 用户先将邮件投递到腾讯的 SMT…

git问题: git@10.18.*.*: Permission denied (publickey,password)

遇到的问题&#xff1a; openSSH版本太高&#xff0c;openssh高版本默认禁止ssh-rsa加密算法&#xff0c;直接换ed25519 执行以下命令&#xff1a; 在.ssh目录下执行&#xff1a;ssh-keygen -t ed25519 -C “youremail.com” ssh-add ~/.ssh/id_ed25519 将id_ed25519.pub添加…

网络知识学习(笔记二)

ios模型规定的网络模型一共有7层&#xff0c;但是实际使用过程中&#xff0c;4层的TCP/IP模型是经常使用的&#xff0c;网络知识学习笔记里面也是基于4层TCP/IP模型进行分析的&#xff0c;前面已经讲了&#xff1a;&#xff08;1&#xff09;物理层&#xff0c;&#xff08;2&a…

c语言编程(模考3)统计字符串中数字字符的个数

统计字符串中数字字符的个数 #include<stdio.h> int main(){char inputString[100];int digitCount 0;printf("请输入一个字符串&#xff1a;");scanf("%s",inputString);for(int i0;inputString[i]!\0;i){if (inputString[i]>0&&inpu…

Android线程优化——整体思路与方法

**在日常开发APP的过程中&#xff0c;难免需要使用第二方库和第三方库来帮助开发者快速实现一些功能&#xff0c;提高开发效率。但是&#xff0c;这些库也可能会给线程带来一定的压力&#xff0c;主要表现在以下几个方面&#xff1a; 线程数量增多&#xff1a;一些库可能会在后…

论文阅读 Forecasting at Scale (一)

最近在看时间序列的文章&#xff0c;回顾下经典 论文地址 项目地址 Forecasting at Scale 摘要1、介绍2、时间业务序列的特点3、Prophet预测模型3.1、趋势模型3.1.1、非线性饱和增长3.1.2、具有变化点的线性趋势3.1.3、自动转换点选择3.1.4、趋势预测的不确定性 摘要 预测是一…

知虾数据软件:电商人必备知虾数据软件,轻松掌握市场趋势

在当今数字化时代&#xff0c;数据已经成为了企业决策的重要依据。对于电商行业来说&#xff0c;数据更是至关重要。如果你想在电商领域中脱颖而出&#xff0c;那么你需要一款强大的数据分析工具来帮助你更好地了解市场、分析竞争对手、优化运营策略。而知虾数据软件就是这样一…

海外IP代理:数据中心代理IP是什么?好用吗?

数据中心代理是代理IP中最常见的类型&#xff0c;也被称为机房IP。这些代理服务器为用户分配不属于 ISP&#xff08;互联网服务提供商&#xff09;而来自第三方云服务提供商的 IP 地址。数据中心代理的最大优势——它们允许在访问网络时完全匿名。 如果你正在寻找海外代理IP&am…

历法、节日、节气

目录 一&#xff0c;阳历、阴历、公历、农历 1&#xff0c;阳历、阴历 2&#xff0c;公历&#xff0c;农历 二&#xff0c;双历合并 1&#xff0c;组成要素 2&#xff0c;一年 3&#xff0c;一月 4&#xff0c;一日 三&#xff0c;闰法则 1&#xff0c;闰秒 2&#…

Influence Matters 成立印度尼西亚办公室,构建北亚及东南亚服务中心

2023 年 11 月 22 日——过去八年&#xff0c;Influence Matters致力于通过高效的公关传播服务&#xff0c;为跨境B2B 科技企业耕耘中国市场提供业务支持。我们已与近百家企业、组织和政府合作&#xff0c;以远超预期的公关传播方案和执行力&#xff0c;为客户与其目标决策者和…

VR全景校园:不被简单定义的校园展示,看的不止“一面”

学校的宣传&#xff0c;还是仅仅依靠一部宣传片来定义的吗&#xff1f;如今&#xff0c;在这个时代&#xff0c;VR全景技术已经越来越成熟了&#xff0c;并逐渐融入了我们的日常生活中&#xff0c;通过VR全景校园&#xff0c;我们可以在网上真实地感受校园的优美环境&#xff0…

Windows + VS2022超详细点云库(PCL1.8.1)配置

本文在结合多位CSDN大佬的步骤&#xff0c;记录以下最全的点云配置过程&#xff0c;防止走弯路&#xff08;并在最后配上PCL环境配置成功的测试代码-彩色兔子&#xff09; 一、PCL介绍 PCL概述_pcl技术_一杯盐水的博客-CSDN博客 二、准备工作&#xff08;PCL版本的下载&…

递归回溯剪枝-子集

LCR 079. 子集 - 力扣&#xff08;LeetCode&#xff09; 方法一 1. 决策树&#xff1a;对于决策树&#xff0c;思考的角度不同&#xff0c;画出的决策树也会不同&#xff0c;这道题可以从两个角度来画决策树。 2. 考虑全局变量的使用&#xff1a; 使用全局变量 List<List&…

金蝶云星空部署包导出文件

文章目录 金蝶云星空部署包导出文件 金蝶云星空部署包导出文件 打开补丁包后&#xff0c;贴入导出文件的文件夹&#xff0c;然后按F2即可导出到目标文件夹。

宽压12-90V转5V3A降压IC,AH8691芯片

## 宽压12-90V转5V3A降压IC&#xff0c;多重保护功能全面升级 1. **宽压输入范围**&#xff1a;8V-100V&#xff0c;支持输出电压低至3.3V 2. **高效转换**&#xff1a;5A典型峰值开关电流&#xff0c;高达95%的转换效率 3. **多重保护**&#xff1a;包括过流、过热、输出短路…