当前位置: 首页 > news >正文

云原生俱乐部-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.xdnf.cn/news/1328527.html

相关文章:

  • 力扣57:插入区间
  • 决策树剪枝及数据处理
  • AI 药物发现:化学分子到机器学习数值特征的转化——打通“化学空间”与“模型空间”关键路径
  • 【Git 子模块与动态路由映射技术分析文档】
  • Matplotlib数据可视化实战:Matplotlib子图布局与管理入门
  • 疏老师-python训练营-Day50预训练模型+CBAM注意力
  • PCL+Spigot服务器+python进行MC编程(使用Trae进行AI编程)---可以生成彩虹
  • Hugging Face 核心组件介绍
  • 35岁对工作的一些感悟
  • Ansible 中的文件包含与导入机制
  • noetic版本/ubuntu20 通过moveit控制真实机械臂
  • 常见的对比学习的损失函数
  • DataAnalytics之Tool:Metabase的简介、安装和使用方法、案例应用之详细攻略
  • 数字ic后端设计从入门到精通14(含fusion compiler, tcl教学)半定制后端设计
  • plantsimulation知识点25.8.19 工件不在RGV中心怎么办?
  • c#联合halcon的基础教程(案例:亮度计算、角度计算和缺陷检测)(含halcon代码)
  • 力扣面试150(60/150)
  • 机器学习之决策树:从原理到实战(附泰坦尼克号预测任务)
  • Mac(七)右键新建文件的救世主 iRightMouse
  • 大数据MapReduce架构:分布式计算的经典范式
  • 20250819 强连通分量,边双总结
  • 从线性回归到神经网络到自注意力机制 —— 激活函数与参数的演进
  • 人工智能统一信息结构的挑战与前景
  • 比赛准备之环境配置
  • 进程间的通信1.(管道,信号)
  • LINUX 软件编程 -- 线程
  • 决策树(续)
  • LeetCode100-560和为K的子数组
  • 决策树1.1
  • 项目一系列-第5章 前后端快速开发