云原生俱乐部-shell知识点归纳(1)

shell的内容也挺多的,虽然云原生课程主要是讲grep、sed、awk三剑客,但是还有结合循环结构,判断语句,以及函数等内容。还是有点复杂的,并且我对shell的掌握并不多,所以写的可能并不全。当然,如果后面遇到了新内容,这个shell系列还是会持续更新的。

本来是打算云原生暑期培训就完结这个云原生俱乐部专栏的,但是现在看来,里面的知识点也很庞大,或许以后还会有新的内容需要添加或者补充。当然,我并不能预测,所以能写多少算多少。不过我的更新速度还是很快的,每天都能写几千字。


这一篇的主要内容是三剑客,最后会做一个补充内容,也就是讲一讲shell中的变量、数组和函数。反正如果要用linux的话,是离不开这三剑客的,因为功能强大且好用,能够省很多事,至于脚本的话,那更不用说了。

grep命令总结

  1. -v反向查找(verbose)
2. -i不区分大小写(默认区分)
3. -n查看并显示行号
4. -w精确匹配模式,而不是包含
5. -l显示文件中包含模式的文件名(不显示具体内容)
6. -r递归查找目录下的文件有该模式的行
7. -c查看有多少匹配的项(相当于wc -l)
8. ^$表示空行
9. a|b属于查找两个中的一个,其实相当于[ab],但属于扩展正则。(但是对于ab|bc这种,使用[]就无法做到了)
10. ()表示分组,后面可以加匹配次数,如:?匹配1次或0次,+匹配1到多次,*匹配0到多次,{1,4}精确匹配1到4次,{1,}匹配1次到无数次。
11. -q表示静默模式,不在标准输出显示,但是可以通过状态码来查看执行情况,使用$?。
12. ||表示前者失败后者才运行,&&表示前者成功后者才运行,使用;则不管成不成功都运行。
13. echo -e表示使用转义字符(如\n),否则不使用。

sed命令总结

1. s命令表示替换
2. a命令表示追加
3. c命令表示替换(整行)
4. i命令表示插入
5. d表示删除
6. p表示打印行
7. 直接用数字6表示第六行,如6d
8. 6,9其中表示6到9行,如6,9d
9. /laste/,9(d,s)表示从匹配的到laste行到第九行
10. 用数字表示范围可以直接跟命令,但是用模式需要用分隔符
11. g表示全部范围
12. i表示不缺分大小写(注意i和g这两个选项都只能用于s)
13.n表示匹配的第几个才执行,与g相对(但同样,只能作为末尾给s使用) 

awk命令总结

1. 都使用单引号,因为有$0等awk命令的特殊符号。
2. awk默认使用扩展正则表达式
3. $0表示整行,$1表示第一列,然后awk会每行每行匹配
4. 使用$2,$4表示的是第二列和第四列,不是连续的。
5. 使用OFS作为输出字段分隔符,默认是空格。
6. NF表示行的列数,每行每行匹配,使用$NF表示取最后一列
7. NR则记录行号,从1开始计数,并且是全局行号,跨文件累增
8. 使用print动作,结果是每行每行输出
9. 可以使用-F ","指定输入分隔符(其实也可以不用引号引起来,但是使用集合的话要用引号),默认也是空格,并且支持使用[]匹配多个分隔符。
10. 可以在动作print之前使用模式匹配,'/pattern/ {print}',共同放在单引号内,
11.  ~表示匹配操作符,一般用于$n ~ 模式(正则表达式) 来匹配,命中的列则可以使用print打印。
12. 也可以使用NR>=或者NR<=或者NR==符号来匹配行号,然后可以使用&&表示与
13. $NF值同样适用,或者说是$n也一样,不建议使用$NR,因为这匹配的还是列而不是对应的行。
14. 使用比较符既可以比较数字,也可以匹配单词,如$3 == "Engineer"(注意这与~模式不太一样)。
15. 可以使用prinft来格式化输出,当然也可以用print配合OFS来控制输出分隔字符。
16. FS是输入分隔符,可以用-F来指定。
17. BEGIN表示在执行之前应用,可以不给awk设置输入文件。
18. {}默认是每行每行的执行,但是前面加上END,表示后面的则是只在输入处理完毕的时候执行一次
19. 可以使用if-else结构,也可以使用for循环结构,也可以使用while循环,可以省略结构的大括号,句子之间通过;相隔。

21. 注意if-else语句,可以用if{}else{},这样做中间不需要加分号隔开,除非if语句不使用{},这样需要用分号隔开。
22. 注意使用while循环的时候,需要将print count和count++放在一个语句块内,只用分号相隔不正确,必须用{}。 
23. next用于跳过当前行的处理,直接下一行,可以结合匹配来使用。(NR==FNR,处理第一个文件的时候为真,因为NR是跨文件的)
24. sort用于按字母排序,使用sort -n则是按数值排序;sort -nr则是按数值反向排序
25. uniq则是进行去重,由于它只会在相邻的进行去重,所以需要先排序,使用-c选项则是在去重结果中显示重复次数。

shell补充内容

本来想自己写写shel三剑客的内容的,但是看了看我之前的笔记,发现我要写的内容和它大差不差。而且这东西只靠记忆是不行的,关键在于运用,死记规则并没有什么用。

所以我把重点放在了这里介绍,主要是shell函数和变量。services=("mysql" "redis" "nginx")可用于声明数组,echo ${services[0]}则输出元素。echo ${services[@]} 用于输出所有元素:mysql redis nginx。

echo ${!services[@]} 用于输出索引:0 1 2 配合变量一起使用,一般将索引赋给变量,然后取索引值获取数组元素。local可用于声明本地变量,如果不用local的话则是全局变量。containers+=("${container_name:-$service}")用于给数组添加元素。

local arr=("$@")可以将函数的所有参数转化为数组,如果是$#,则也是所有的参数,但不会有空格间隔,$0则是脚本名。${var:-default}如果var未设置或为空,返回default,上面的例子就是用了。

${var:=default}如果var未设置或为空,设置var为default并返回;${var:?Error}如果var未设置,打印Error并退出。测试语句和算术语句的使用也很多,[[ -z "$str" ]]判断为空, [[ -n "$str" ]]判断非空。((count++))用于自增,(( )) 是 Bash 的算术运算复合命令​​,里面的变量可以不用加$取值。

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

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

相关文章

设计模式(四)——责任链模式

1. 责任链模式的定义 责任链模式&#xff08;Chain of Responsibility&#xff0c;简称 CoR&#xff0c;也叫职责链模式&#xff09;是一种行为型设计模式&#xff0c;允许一个请求在一系列处理器&#xff08;handlers&#xff09;中传递。每个处理器可以选择自己处理该请求&am…

MyBatis-Plus基础篇详解

文章目录前言一、简单介绍MyBatis-Plus1.1 特性1.2 架构二、SpringBoot集成MyBatis-Plus2.1 项目搭建2.2 导入所需依赖2.3 配置application.yml2.4 创建实体类2.5 创建Mapper接口2.6 启动类配置三、DQL操作3.1 基础查询3.2 QueryWrapper查询3.3 LambdaQueryWrapper查询3.4 分页…

基于W55MH32Q-EVB 实现 HTTP 服务器配置 OLED 滚动显示信息

目录 1 前言 2 项目环境 2.1 硬件准备 2.2 软件环境 3.硬件连接和方案 3.1 硬件连接 3.2 方案图示 4.例程修改 1 前言 HTTP&#xff08;超文本传输协议&#xff0c;HyperText Transfer Protocol&#xff09;是一种用于分布式、协作式、超媒体信息系统的应用层协议&#xff0c; …

YggJS RLogin暗黑霓虹主题登录注册页面 版本:v0.1.1

项目介绍 yggjs_rlogin 是一个专注于 React 登录/注册页面的组件库。本文档介绍“暗黑霓虹”主题&#xff1a;#111 暗色背景 青蓝霓虹描边输入框 赛博朋克光效按钮。 安装说明 安装&#xff1a;pnpm add yggjs_rlogin react react-dom使用&#xff1a;从 yggjs_rlogin 引入组…

大数据毕业设计选题推荐:护肤品店铺运营数据可视化分析系统详解

&#x1f34a;作者&#xff1a;计算机毕设匠心工作室 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目…

【github-action 如何为github action设置secrets/environment】

Using secrets in GitHub Actions 在 GitHub Actions 中使用密钥 Learn how to create secrets at the repository, environment, and organization levels for GitHub Actions workflows. 学习如何在仓库、环境和组织级别为 GitHub Actions 工作流创建密钥。 Creating secre…

宝塔面板Docker安装n8n汉化中文

一、Docker安装N8N 安装配置默认即可&#xff0c;如果端口已被使用&#xff0c;可以自行更改 当状态为运行中时&#xff0c;就可以点击端口&#xff1a;访问N8N 填写完信息后&#xff0c;点击下一步&#xff08;邮箱要能接收邮件&#xff1a;接收密钥&#xff09; 点开始 点击发…

F003疫情传染病数据可视化vue+flask+mysql

编号:F003 文章结尾有CSDN官方提供的学长的联系方式&#xff01;&#xff01; 欢迎关注B站 ✅ vue flask 前后端分离架构 ✅ 实现中国地图、柱状图、折线图、水地图、环图等多种图形的echarts可视化分析 视频 vueflask爬虫 新冠疫情大屏实现 python 可视化分析项目源码1 系统…

plantsimulation知识点25.8.19 工件不在RGV中心怎么办?

如果出现这种情况&#xff0c;工件不在RGV的中心该怎么处理。首先说一下出现这种情况的原因。因为模拟的是两台RGV共同托举一个工件移动&#xff0c;实际上RGV控制的代码还是写在一条轨道的传感器控制代码中。另一台RGV只是从动的&#xff0c;工件也是在其中任意一台RGV上&…

redis-sentinel基础概念及部署

一. 引言&#xff1a;Redis Sentinel 是 redis 官方提供的高可用解决方案&#xff0c;主要用于监控 Redis 主从集群&#xff0c;在主节点故障时自动完成故障转移&#xff0c;确保服务持续可用。二. 核心功能1. 监控&#xff08;monitoring&#xff09;&#xff1a;持续检查主节…

LangChain RAG 简述

在 LangChain 中实现 RAG&#xff08;检索增强生成&#xff0c;Retrieval-Augmented Generation&#xff09;的核心思路是&#xff1a;让大模型在生成回答前&#xff0c;先从外部知识库&#xff08;如文档、数据库等&#xff09;中检索相关信息&#xff0c;再基于检索到的内容生…

GEO 优化专家孟庆涛:技术破壁者重构 AI 时代搜索逻辑

在生成式 AI 重塑全球搜索生态的浪潮中&#xff0c;中国 GEO&#xff08;生成式引擎优化&#xff09;领域的开拓者孟庆涛以 "智能决策革命" 的技术框架&#xff0c;颠覆了传统 "发发文章" 的简单认知。作为辽宁粤穗网络科技有限公司总经理兼 GEO 实验室主任…

用relation-graph构建关系图谱 vue版

用relation-graph构建关系图谱 vue版vue文件和Json数据vue文件和Json数据 <template><div><div style"margin-top:0px;width: calc(100% - 10px);height:calc(100vh);"><RelationGraph ref"graphRef" :options"graphOptions&qu…

Python基础-控制结构

控制结构是编程语言中用来控制程序执行流程的语句。Python提供了条件语句、循环语句等控制结构&#xff0c;让程序能够根据不同条件执行不同的代码块。 程序执行流程图&#xff1a; ┌───────────────────────────────────────────…

Java算法之排序

下面我们将讲述七大基于比较的排序算法的基本原理及实现。并从稳定性、时间复杂度、空间复杂度3种性能对每种排序进行分析。 重点&#xff1a;快速排序和堆排序&#xff1b;难点&#xff1a;快速排序和归并排序 目录 一、排序概念 二、常见排序算法的实现 2.1 插入排序 2.…

RabbitMQ:SpringAMQP 多消费者绑定同一队列

目录一、案例需求二、代码实现三、总结生产者源码 消费者源码 一、案例需求 模拟WorkQueue&#xff0c;实现一个队列绑定多个消费者。 在RabbitMQ的控制台创建一个队列&#xff0c;命名为work.queue。在生产者服务中定义测试方法&#xff0c;在1s内产生50条消息&#xff0c;…

Java技术总监的成长之路(技术干货分享)

以下是针对 ​Java技术总监​ 在 Linux 环境下搭建企业级开发环境的完整指南&#xff0c;涵盖 JDK 配置、工程工具链、协作平台及性能优化方案&#xff1a; 本文章仅提供学习&#xff0c;切勿将其用于不法手段&#xff01; 一、核心环境搭建 1. ​JDK 安装与调优​ ​版本选择…

C++代码解释:实现一个 mystring 类,用于表示字符串,实现构造函数,默认构造长度为 10 的空间,提供打印字符串,获取空间大小,修改内容的成员函数

题目代码#include <cstring> // 包含字符串处理函数库&#xff0c;如strlen、strncpy等 #include <iostream> // 包含输入输出流库&#xff0c;用于cout等操作 using namespace std; // 使用标准命名空间&#xff0c;避免重复书写std::class mystring { // 定…

如何解决IDEA/Datagrip无法连接数据库的问题:解决方法为添加参数-Djava.net.preferIPv4Stack=true

如何解决IDEA/Datagrip无法连接数据库的问题&#xff1a;解决方法为添加参数-Djava.net.preferIPv4Stacktrue 引言 在开发过程中&#xff0c;我们常常使用集成开发环境&#xff08;IDE&#xff09;如 IntelliJ IDEA 或 JetBrains DataGrip 来与数据库进行交互。然而&#xff…

走进数字时代,融入数字生活,构建数字生态

一、准备在IT行业深耕十七年&#xff0c;始终专注于企业生产经营中的实际应用问题&#xff0c;历经开发、测试、运维、实施、架构设计等多个技术岗位&#xff0c;并参与肉制品的生产与销售业务&#xff0c;推进了企业主业的市场管理落地&#xff0c;积累了业务与信息技术融合的…