shell学习3---for循环

for循环格式

基本格式

for   变量名称(注意是名称不是变量$等)    [  in   名称范围  ] (可以不写)

do   

执行内容    (若满足循环则做什么动作)

done          (for循环结束标志)

名称范围是字符

[root@server1 ~]# ./for_test.sh
1
2
3
4
[root@server1 ~]# cat for_test.sh
#!/bin/bash
for i in {1,2,3,4}
doecho "$i"
done

名称范围是一个文件

[root@server1 ~]# ./for_test.sh
a
b
c
d
e
[root@server1 ~]# cat for_test.sh
#!/bin/bash
for i in `cat 1.txt`
doecho "$i"
done
[root@server1 ~]# cat 1.txt
a
b
c
d
e
类C语言格式

for (( 表达式1 ;表达式2;表达式3   )) 

do

执行内容    (若满足循环则做什么动作)

done         (for循环结束标志)

[root@server1 ~]# ./for_test.sh
1
2
3
4
5
[root@server1 ~]# cat for_test.sh
#!/bin/bash
for ((i=1;i<=5;i++))
doecho "$i"
done

seq

seq 是一个 Linux/Unix 命令,用于生成一个序列(sequence)并打印出来。

格式

 seq     2 (起始数)   2(间隔数)    10(终止数)

[root@server1 ~]# seq 2 2 10
2
4
6
8
10
[root@server1 ~]# seq 10 -2 1
10
8
6
4
2
seq结合for循环
[root@server1 ~]# ./for_test.sh
1
3
5
7
9
[root@server1 ~]# cat for_test.sh
#!/bin/bash
for i in `seq 1 2 10`
doecho "$i"
done

跳出循环

break和continue命令是控制循环流程重要命令。

continue跳出循环

continue跳出循环:满足continue条件时跳出循环,但是不影响后续循环执行。

它的作用是在循环内部跳过本次循环并继续下一次循环

[root@server1 ~]# ./for_test.sh
1
3
5
9
[root@server1 ~]# cat for_test.sh
#!/bin/bash
for i in `seq 1 2 10`
doif [ $i -eq 7 ]thencontinuefiecho "$i"
done

continue [数字] 是一个 Shell 中的控制结构,当数字是2时,它的作用是在循环内部跳过本次循环并继续下一次循环,而且会跳过两层循环,即在两层循环内部执行。

[root@server1 ~]# ./for_test.sh
1
1
1
[root@server1 ~]# cat for_test.sh
#!/bin/bash
for ((i=1;i<=3;i++))
dofor ((j=1;j<=3;j++))doif [ $j -eq 2 ]thencontinue 2fiecho "$j"done
done
break跳出循环

break跳出循环:break直接结束此次循环,但是不影响外边嵌套的循环。

[root@server1 ~]# ./for_test.sh
1
2
1
2
[root@server1 ~]# cat for_test.sh
#!/bin/bash
for ((i=1;i<=2;i++))
dofor ((j=1;j<=4;j++))doif [ $j -eq 3 ]thenbreakfiecho "$j"done
done

break  [数字] 结束数字中的几次循环

[root@server1 ~]# ./for_test.sh
1
2
[root@server1 ~]# cat for_test.sh
#!/bin/bash
for ((i=1;i<=2;i++))
dofor ((j=1;j<=4;j++))doif [ $j -eq 3 ]thenbreak 2fiecho "$j"done
done

echo相关的常用转义字符

echo -n 表示不换行输出。

[root@server1 ~]# ./for_test.sh
123123[root@server1 ~]# cat for_test.sh
#!/bin/bash
for ((i=1;i<=2;i++))
dofor ((j=1;j<=3;j++))doecho -n "$j"done
done

echo -e 输出转义字符,将转义后的内容输出到屏幕上, 只有加了-e才能执行下面的转义符。

常用转义符:

\b转义后是一个退格符(Backspace),用于将光标向前移动一个位置,但不删除该位置上的字符。不过,当输出到终端时,实际的效果可能会受到终端如何处理退格符的影响。

[root@server1 ~]# echo -e "1234a"
1234a
[root@server1 ~]# echo -e "1234\ba"
123a
[root@server1 ~]# echo -e "1234\b\ba"
12a4

\c 转义后表示不换行输出,在"\c"后面不存在字符的情况下,作用相当于 echo -n; 但是当"\c"后面仍然存在字符时,"\c"后面的字符将不会被输出。

[root@server1 ~]# echo -e "1234\c"
1234[root@server1 ~]#
[root@server1 ~]# echo -e "12\c34"
12[root@server1 ~]#

\n 转义后表示换行,被输出的字符从"\n"处开始另起一行。

[root@server1 ~]# echo -e "12\n34"
12
34

\f 转义后是一个表单馈送符(Form Feed),通常用于在打印输出中将纸张向前移动到下一页的开始,或者在终端中,它通常用于清除屏幕并移动光标到屏幕的左上角(尽管这个行为可能会根据终端的不同而有所差异)。

\v 转义后是一个垂直制表符(Vertical Tab),它在输出中通常用于在垂直方向上移动光标到下一个制表位置。

[root@server1 ~]# echo -e "1234\v1234"
12341234

\t 转以后表示插入tab,即横向制表符(tab)。

[root@server1 ~]# echo -e "1234\t1234"
1234    1234

\r 转以后表示光标移至行首,但不换行,相当于使用"\r"以后的字符覆盖"\r"之前同等长度的字符;但是当"\r"后面不存在任何字符时,"\r"前面的字符不会被覆盖

[root@server1 ~]# echo -e "1234\rabcd"
abcd
[root@server1 ~]# echo -e "1234\rab"
ab34

使用for循环和echo相关的常用转义字符打印一张出九九乘法表

1.打印一个9*9的正方形队列

[root@server1 ~]# ./99_test.sh
*********
*********
*********
*********
*********
*********
*********
*********
*********
[root@server1 ~]# cat 99_test.sh
#!/bin/bash
for ((i=1;i<=9;i++))
dofor ((j=1;j<=9;j++))doecho -n "*"done
echo #用于换行
done

2.砍半

[root@server1 ~]# ./99_test.sh
*
**
***
****
*****
******
*******
********
*********
[root@server1 ~]# cat 99_test.sh
#!/bin/bash
for ((i=1;i<=9;i++))
dofor ((j=1;j<=i;j++))doecho -n "*"done
echo #用于换行
done

3.填入内容

[root@server1 ~]# ./99_test.sh
1*1=1
1*2=22*2=4
1*3=32*3=63*3=9
1*4=42*4=83*4=124*4=16
1*5=52*5=103*5=154*5=205*5=25
1*6=62*6=123*6=184*6=245*6=306*6=36
1*7=72*7=143*7=214*7=285*7=356*7=427*7=49
1*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=64
1*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81
[root@server1 ~]# cat 99_test.sh
#!/bin/bash
for ((i=1;i<=9;i++))
dofor ((j=1;j<=i;j++))doecho -n "$j*$i=$(($j*$i))"done
echo #用于换行
done

4.调整格式

[root@server1 ~]# ./99_test.sh
1*1=1
1*2=2   2*2=4
1*3=3   2*3=6   3*3=9
1*4=4   2*4=8   3*4=12  4*4=16
1*5=5   2*5=10  3*5=15  4*5=20  5*5=25
1*6=6   2*6=12  3*6=18  4*6=24  5*6=30  6*6=36
1*7=7   2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49
1*8=8   2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64
1*9=9   2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81
[root@server1 ~]# cat 99_test.sh
#!/bin/bash
for ((i=1;i<=9;i++))
dofor ((j=1;j<=i;j++))doecho -ne "$j*$i=$(($j*$i))\t"done
echo #用于换行
done

完成。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

google vr 入门之VrPanoramaView制作全景图列表(1)

展示图片的列表我这里使用RecycleView&#xff0c;activity_main.xml <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android“http://schemas.android.com/apk/res/android” xmlns:tools“http://schemas.android.com/tool…

【orin-nx Linux下创建简单C++项目 CMake构建编译系统】

【注意】&#xff1a;需要安装gcc 和 cmake 安装视频 #.sh 文件添加权限 chmod x cmake-3.30.3-linux-aarch64.sh1、在root下创建一个文件夹testaubo 2、在testaubo文件夹下创建5个文件夹以及一个cmake文件 2.1、【src】 文件夹存放C的 .cpp文件2.2、【include】 文件夹存…

【Unity错误】No cloud project ID was found by the Analytics SDK

在编译默认的URP 2D项目时&#xff0c;出现这样一个错误&#xff1a;No cloud project ID was found by the Analytics SDK. This means Analytics events will not be sent. Please make sure to link your cloud project in the Unity editor to fix this problem. 原因&…

深入理解TCP三次握手

在网络通信中&#xff0c;TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一个可靠的、面向连接的协议&#xff0c;它保证了数据包的顺序和完整性。为了建立一个稳定的连接&#xff0c;TCP 使用了一个被称为 三次握手&#xff08;Three-W…

C#中的Graphics类和SetQuality()自定义方法

在 C# 中&#xff0c;Graphics 类是 System.Drawing 命名空间的一部分&#xff0c;它提供了一组方法和属性&#xff0c;用于在 Windows Forms 应用程序中进行二维绘图。Graphics 对象可以绘制文本、线条、曲线、形状和图像&#xff0c;并可以对它们进行变换和剪辑。 Graphics …

FTP、SFTP安装,整合Springboot教程

文章目录 前言一、FTP、SFTP是什么&#xff1f;1.FTP2.SFTP 二、安装FTP1.安装vsftp服务2.启动服务并设置开机自启动3.开放防火墙和SELinux4.创建用户和FTP目录4.修改vsftpd.conf文件5.启动FTP服务6.问题 二、安装SFTP总结 前言 在一般项目开发工程中&#xff0c;我们大多数会…

JavaWeb案例-登录认证

在前面的文章中&#xff0c;我们复习了部门管理、员工管理的基本功能。但是我们并没有登录&#xff0c;就直接访问到了Tilias智能辅助系统的后台。这是不安全的&#xff0c;所以今天复习登录认证。最终实现的效果就是用户必须登录之后&#xff0c;才可以访问后台系统中的功能。…

git cz 规范化 git commit 格式

git cz 规范化 git commit 格式 npm install git-cz --save-devnpm install commitizen --save-devnpm install cz-customizable --save-dev // 这是package.json自动生成的 "config": {"commitizen": {"path": "./node_modules/cz-custo…

文件对比工具--BeyondCompare

&#x1f496;简介 Beyond Compare 是一款功能强大的文件和文件夹比较工具&#xff0c;由Scooter Software开发。它可以帮助用户轻松地比较文件和文件夹的差异&#xff0c;并且可以合并变化、同步文件以及备份重要数据 &#x1f4bb;环境 windows &#x1f4d6;版本 Beyon…

from T2I to T2V

生成图片 在Stable Diffusion推理过程中&#xff0c;其使用unet对一个初始化的向量不断去噪&#xff0c;并编入条件信息 c c c &#xff0c;最后使用vae-decoder将其上采样为一张图片。 计算过程&#xff1a; f l a t e n t u n e t ( f l a t e n t ) , f l a t e n t ∈ R…

k8s环境搭建

创建一个新的model虚拟机&#xff0c;处理器为2&#xff0c;硬盘为40G 使用model主机克隆三台新的主机&#xff0c;名称分别为k8s_master&#xff0c;k8s_node01&#xff0c;k8s_node02&#xff0c;运行环境脚本&#xff0c;设置ip地址和名称&#xff0c;IP地址分别为66、77、…

webpack5 创建多页面应用配置

简单版webpack创建多页面应用&#xff0c;只要把配置文件复制下来&#xff0c;然后npm安装相应插件&#xff0c;正常是能跑起来了 创建 初始化 npm init生成package.json文件安装webpack npm i -D webpack webpack-cli webpack-dev-server创建main.js入口文件和webpack.config…

Spring Cloud之二 微服务注册

1&#xff1a;Intellij 新建服务 user-service 2&#xff1a;pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"…

当 PLC 遇见 “IT”

IT&OT 深度融合工控人加入PLC工业自动化精英社群 IT & OT integration 当今不断发展的工业自动化世界&#xff0c;在智能、高效和快速的系统和软件应用中&#xff0c;数据扮演着越来越重要的角色。传统的 IT 网络中&#xff0c;提供了丰富多彩的规范和协议&#xff0…

kitti数据深度图转点云坐标计算方法与教程(代码实现)

文章目录 前言一、kitti深度图官网介绍1、官网深度图介绍2、深度图读取官网代码(python)3、深度图解读1、数据格式内容2、深度图加工3、深度图转相机坐标深度二、kitti数据内参P矩阵解读1、P2矩阵举例2、内参矩阵 (3x3)3、特殊平移向量(第4列)4、kitti的bx与by解释三、kitti深…

使用Redis实现记录访问次数(三种方案)

目录 0. 前言1. 使用Filter实现2. 使用AOP实现 1. 导入依赖 2. 写一个切面类&#xff0c;实现统计访问次数。 3. 开启AOP 4. 测试 5. plus版本 (1) 新建一个bean类 (2) 新增一个controller方法 (3) 新增一个循环增强方法 (4) 测试…

Python之Redis操作方法

目录 一. 介绍A. 什么是 Redis&#xff1f;B. Redis 的特点和用途C. Python 操作 Redis 的优势 二. 使用 Redis 客户端库A. 安装 Redis 客户端库B. 导入 Redis 模块C. 创建 Redis 客户端实例 三. 数据操作A. 键值对操作1. 设置键值对2. 获取键值对3. 检查键是否存在4. 删除键5.…

使用切换 JDK 的方式优化部署微服务占用内存过高的问题

使用切换 JDK 的方式优化部署微服务占用内存过高的问题 一、前言二、下载 J9 虚拟机的JDK三、切换 JDK1、上传到服务器2、解压3、修改 JDK 路径4、解决 JDK 没有切换成功的问题 一、前言 前段时间在服务器部署了微服务项目&#xff0c;但即使限制了每个服务的堆&#xff0c;内…

【网络安全】-文件下载漏洞-pikachu

文件操作漏洞包括文件上传漏洞&#xff0c;文件包含漏洞&#xff0c;文件下载漏洞。 文章目录  前言 什么是文件下载漏洞&#xff1f; 1.常见形式&#xff1a; 常见链接形式&#xff1a; 常见参数&#xff1a; 2.利用方式&#xff1a; 3.举例&#xff1a;pikachu不安全的文件…

ABB机械手备份与恢复

ABB机械手备份与恢复 备份恢复系统 备份 ABB机器人数据备份的对象是所有正在系统内存中运行的RAPID程序和系统参数。当机器人系统出现错乱或者重新安装系统以后&#xff0c;可以通过备份快速地把机器人恢复到备份时的状态。 如果导出到U盘需要将U盘插入USB接口&#xff0c;位置…