sh 脚本循环语句和正则表达式

news2024/11/23 9:04:01

目录

1、循环语句

1、for

2、while

3、until

2、正则表达式

1、元字符

2、表示次数

3、位置锚定

4、分组

5、扩展正则表达式


1、循环语句

循环含义

将某代码段重复运行多次,通常有进入循环的条件和退出循环的条件

重复运行次数

  • 循环次数事先已知

  • 循环次数事先未知

1、for

for 为已知循环数

for  tlj(变量)   循环次数(取值列表)

do   需要循环的事件

done


或者

for (( 表达式1; 表达式2; 表达式3 )); do 命令; done


表达式1:定义变量并赋初值
表达式2:决定是否循环
表达式3:决定循环变量如何改变,决定循环什么时候退出

2、while

相对于for,需要知道循环次数

我们只知道停止条件,不知道次数,就需要使用while

直到达到条件

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

1到100相加

3、until

基本和while相同 但是 until 是当命令判断为真时停止

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

1到100相加

2、正则表达式

REGEXP: Regular Expressions,由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能,类似于增强版的通配符功能,但与通配符不同,通配符功能是用来处理文件名,而正则表达式是处理文本内容中字符。

正则表达式被很多程序和开发语言所广泛支持:vim, less,grep,sed,awk, nginx,mysql 等

主要用来匹配字符串(命令结果,文本内容)

通配符匹配文件(而且是已存在的文件)

  • 基本正则表达式

  • 扩展正则表达式

1、元字符

.   匹配任意单个字符,可以是一个汉字  

[]   匹配指定范围内的任意单个字符,示例:[zhou]   [0-9]   []   [a-zA-Z]   [:alpha:]
[^] 匹配指定范围外的任意单个字符,示例:[^zhou] [^a.z] [a.z]

[:alnum:] 字母和数字

[:space:] 包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白

2、表示次数

* #匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
.* #任意长度的任意字符,不包括0次
\? #匹配其前面的字符出现0次或1次,即:可有可无
\+ #匹配其前面的字符出现最少1次,即:肯定有且 >=1 次
\{n\} #匹配前面的字符n次
\{m,n\} #匹配前面的字符至少m次,至多n次
\{,n\}  #匹配前面的字符至多n次,<=n
\{n,\}  #匹配前面的字符至少n次

 

3、位置锚定

^ #行首锚定, 用于模式的最左侧
$ #行尾锚定,用于模式的最右侧
^PATTERN$ #用于模式匹配整行 (单独一行  只有root)
^$ #空行
^[[:space:]]*$ #  空白行

\< 或 \b        #词首锚定,用于单词模式的左侧(连续的数字,字母,下划线都算单词内部)
\> 或 \b        #词尾锚定,用于单词模式的右侧
\<PATTERN\>     #匹配整个单词

4、分组

分组:() 将多个字符捆绑在一起,当作一个整体处理

后向引用:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名

5、扩展正则表达式

grep -E 或者 egrep

*   匹配前面字符任意次
? 0或1次
+ 1次或多次
{n} 匹配n次
{m,n} 至少m,至多n次
{,n}  #匹配前面的字符至多n次,<=n,n可以为0
{n,} #匹配前面的字符至少n次,<=n,n可以为0

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RS232、RS422、RS485硬件及RS指令、RS2指令应用知识学习

RS232、RS422、RS485硬件及RS指令、RS2指令应用知识学习 一、串行&#xff08;异步/同步)通讯、并行通讯、以太网通讯 二、单工通讯/半双工通讯/双工通讯 三、常用硬件接口&#xff08;工业上基本是RS485两线制的接线&#xff09; 常用硬件接口RS232/RS422/RS485&#xff0c;…

Delegates.observable追踪观察可变数据更新,Kotlin

Delegates.observable追踪观察可变数据更新&#xff0c;Kotlin import kotlin.properties.Delegates import kotlin.reflect.KPropertyclass Person {var name: String by Delegates.observable("fly") { prop: KProperty<*>, old: String, new: String ->p…

SpringBoot 学习(04):Idea 中控制启动命令的详细过程 环境区分案例

Idea 启动SpringBoot的命令 C:\Users\Administrator\.jdks\corretto-17.0.8\bin\java.exe -XX:TieredStopAtLevel1 -Dspring.output.ansi.enabledalways -Dcom.sun.management.jmxremote -Dspring.jmx.enabledtrue -Dspring.liveBeansView.mbeanDomain -Dspring.applica…

EasyRecovery14数据恢复软件支持各类存储设备的数据恢复

EasyRecovery14数据恢复软件专业数据恢复软件支持电脑、相机、移动硬盘、U盘、SD卡、内存卡、光盘、本地电子邮件和 RAID 磁盘阵列等各类存储设备的数据恢复。 目前市面上有许多数据恢复软件&#xff0c;但褒贬不一&#xff0c;而且数据恢复软件又不是一款会被经常使用的软件&a…

【多模态】26、视觉-文本多模态任务超详细介绍 「CLIP/LSeg/ViLD/GLIP/ALBEF/BLIP/CoCa/BEIT」

文章目录 准备知识一、CLIP&#xff1a;不同模态简单对比的方法更适合于图文检索1.1 CLIP 在分割上的改进工作1.1.1 LSeg1.1.2 Group ViT 1.2 CLIP 在目标检测上的改进工作1.2.1 ViLD1.2.2 GLIPv11.2.3 GLIPv2 二、ViLT/ALBEF &#xff1a;多模态融合在 VQA/VR 任务中更重要三、…

基于protobuf和httplib的在线通讯录项目框架|Protobuf应用小项目

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总https://blog.csdn.net/yu_cblog/categ…

学习设计模式之适配器模式,但是宝可梦

前言 作者在准备秋招中&#xff0c;学习设计模式&#xff0c;做点小笔记&#xff0c;用宝可梦为场景举例&#xff0c;有错误欢迎指出。 适配器模式 意图&#xff1a;将一个类的接口转换成客户希望的另一个接口 主要解决&#xff1a;把现有对象放到新环境里&#xff0c;而新…

leetcode几个数组题

数组理论基础 数组是存放在连续内存空间上的相同类型数据的集合 因为数组的在内存空间的地址是连续的&#xff0c;所以我们在删除或者增添元素的时候&#xff0c;就难免要移动其他元素的地址 二分查找 移除元素 有序数组的平方 209.长度最小的子数组

设计模式——开闭原则

文章目录 基本介绍看下面一段代码方式 1 的优缺点改进的思路分析 基本介绍 开闭原则&#xff08;Open Closed Principle&#xff09;是编程中最基础、最重要的设计原则 一个软件实体如类&#xff0c;模块和函数应该对扩展开放(对提供方)&#xff0c;对修改关闭(对使用方)。用抽…

wustoj2008折扣

#include <stdio.h> int main() {int n,m;double c;scanf("%d%d",&n,&m);cn*(m/10.00);printf("%.2lf",c);return 0;}

茂名 湛江阳江某学校 ibm x3850服务器维修经历

简介&#xff1a;中国广东省阳江市某中学联想 IBM System x3850 x6服务器维修 io板故障处理经历分享&#xff1a; 这一天一位阳江的老师经其他学校老师介绍推荐对接我&#xff0c;说他们学校有一台ibm服务器出问题了&#xff0c;老师大致跟我描述了一下这台服务器发生故障的前…

3、Spring之底层架构核心概念解析

BeanDefinition BeanDefinition表示Bean定义,BeanDefinition中存在很多属性用来描述一个Bean的特点。比如: class,表示Bean类型scope,表示Bean作用域,单例或原型等lazyInit:表示Bean是否是懒加载initMethodName:表示Bean初始化时要执行的方法destroyMethodName:表示Be…

【算法刷题之数组篇(1)】

目录 1.leetcode-59. 螺旋矩阵 II&#xff08;题2.题3相当于二分变形&#xff09;2.leetcode-33. 搜索旋转排序数组3.leetcode-81. 搜索旋转排序数组 II(与题目2对比理解)&#xff08;题4和题5都是排序双指针&#xff09;4.leetcode-15. 三数之和5.leetcode-18. 四数之和6.leet…

Python制作爱心并打包成手机端可执行文件

前言 本文是想要将python代码打包成在手机上能执行的文件 尝试了几个库&#xff0c; 有这也那样的限制&#xff0c;最终还是选了BeeWare 环境&#xff1a;python3.7.x 开始 找到打包有相关工具os-android-apk-builder&#xff0c;buildozer&#xff0c;cx_Freeze&#xff…

AMBA总线协议(1)——概述

目录 一、AMBA总线简介 二、基于AMBA 的典型微控制器 三、AHB介绍 1、概述 2、典型结构 &#xff08;1&#xff09; AHB 主机&#xff08;AHB Master&#xff09; &#xff08;2&#xff09;AHB 从机&#xff08;AHB Slave&#xff09; &#xff08;3&#xff09;AHB 仲裁…

基础论文学习(1)——ViT

https://zhuanlan.zhihu.com/p/308301901 1 图片分块和降维 因为transformer encoder的输入需要序列&#xff0c;所以最简单做法就是把图片切分为patch&#xff0c;然后拉成序列即可。 假设输入图片大小是256x256&#xff0c;打算分成64个patch&#xff0c;每个patch是32x32…

[MySQL]02关于事务的解析

目录 原子性 一致性 持久性 隔离性 事务隔离级别 并发执行可能存在问题 脏读问题 不可重复读 幻读 难点解析 原子性 事务最核心的就是原子性 以前人们认为原子不可再分&#xff0c;用原子性来表示一个事务不可分割 update account set balancebalance-500 where nam…

Go语言入门指南:基础语法和常用特性(下)

上一节&#xff0c;我们了解Go语言特性以及第一个Go语言程序——Hello World&#xff0c;这一节就让我们更深入的了解一下Go语言的**基础语法**吧&#xff01; 一、行分隔符 在 Go 程序中&#xff0c;一行代表一个语句结束。每个语句不需要像 C 家族中的其它语言一样以分号 ;…

MySQL基础篇(二)

DML 定义&#xff1a;Data Manipulation Language、数据操作语言&#xff08;增删改&#xff09; 添加数据&#xff08;INSERT&#xff09;修改数据&#xff08;UPDATE&#xff09;删除数据&#xff08;DELETE&#xff09; 添加数据&#xff08;INSERT&#xff09; 给指定的…

day0818

1. #include <myhead.h> int file_len(const char*strfile, const char*dstfile); void file_copy(const char* strfile, const char* dstfile, int start, int size); int main(int argc, const char *argv[]) {//判断是否传入两个文件if(argc!3){printf("input fi…