【运维工程师学习三】shell编程

news2024/10/6 19:18:04

【运维工程师学习三】shell编程

    • 1、系统中sh命令是bash的软链接
    • 2、Shell脚本标准格式之文件后缀
    • 3、Shell脚本标准格式之文件内容首行
    • 4、Shell脚本的运行方法
      • 一、作为可执行程序
        • 解释
      • 二、作为解释器(bash)参数
    • 5、find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk的常用命令
      • 1. `find`:用于在文件系统中搜索文件或目录。
      • 2. `grep`:用于在文件或输入中查找特定模式。
      • 3. `xargs`:用于从标准输入中读取参数并将其传递给其他命令。
      • 4. `sort`:用于对文本进行排序。
      • 5. `uniq`:用于从排序后的输入中筛选出唯一的行。
      • 6. `tr`:用于字符替换和删除。
      • 7. `cut`:用于从文本中提取指定字段。
      • 8. `paste`:用于将多个文件的内容合并为一行。
      • 9. `wc`:用于计算文件或文本的行数、字数和字符数。
      • 10. `sed`:用于流式文本编辑。
      • 11. `awk`:用于处理结构化文本数据。

Shell程序有很多, 如Korn shell(ksh)、Bourne Again shell(bash)、C shell(包括csh与tcsh)等等,
各主要操作系统下缺省的shell:
AIX下是Korn Shell
Solaris缺省的是Bourne shell
FreeBSD缺省的是C shell
HP-UX缺省的是POSIX shell
Linux缺省的是Bourne Again shell

1、系统中sh命令是bash的软链接

sh=bash
file /usr/bin/sh
sh --version
/usr/bin/bash --version

在这里插入图片描述

 whereis sh

在这里插入图片描述
但这种在命令行中的命令是即时输出结果的,不能重复使用(重复输入可以重复使用,但如果是要多行输入的命令则极不方便),要想方便重复使用同一个功能就把多行的命令放到一个标准格式的文件中,这就是shell编程了。
所以所谓shell编程就是一行或多行不同功能的shell命令的集合!这个shell命令集合的文件叫shell script(shell脚本)。

2、Shell脚本标准格式之文件后缀

Shell脚本文件一般是以.sh为后缀,如下图显示的文件fin是系统上默认存在的shell脚本文件

find /-name *.sh

在这里插入图片描述

3、Shell脚本标准格式之文件内容首行

首行通常是#!/bin/sh#!/bin/bash#!/usr/bin/sh或#!/usr/bin/bash开头(或者你还会看到其它的路径,或者全部有之)。该行的意思是,它告诉系统这个脚本需要什么解释器(即是什么shell,本系统是bash)来执行。
在这里插入图片描述
从第二行开始,凡是以#开头的行,说明该行均不会被执行,多用来作注释、说明。

注意:是以行为单位的。

到不是#开头的行开始,才是有效的命令、代码。
因篇幅原因,本截图省了后面很多内容,请自行在系统上查看该文件完整内容。

4、Shell脚本的运行方法

一、作为可执行程序

#!/bin/sh
ip addr | grep -v 127.0.0.1 | grep -v inet6 | grep inet | awk '{print $2}' | cut -d / -f 1

解释

这段Shell脚本的作用是获取本机的IPv4地址,并将其输出。

让我来一步一步解释这段脚本的具体内容:

  1. #!/bin/sh:这是一个shebang(也称为hashbang),用于指定脚本使用哪个解释器来执行。在这里,#!/bin/sh表示脚本将使用默认的shell解释器来执行,通常是Bash或类似的shell。

  2. ip addr:这个命令用于获取关于网络接口的信息,包括IP地址和其他网络配置。

  3. grep -v 127.0.0.1:这个命令用于过滤掉IP地址中包含 127.0.0.1 的行,即过滤掉环回地址。

  4. grep -v inet6:这个命令用于过滤掉IP地址中包含 inet6 的行,即过滤掉IPv6地址。

  5. grep inet:这个命令用于筛选出包含 inet(IPv4地址)的行。

  6. awk '{print $2}':这个命令使用awk来提取每一行的第二个字段(IPv4地址),并进行打印输出。

  7. cut -d / -f 1:这个命令使用cut来根据 / 进行分隔,提取分隔后的第一个字段(IPv4地址的主机部分),并进行打印输出。

综合起来,这个脚本的作用是获取本机的IPv4地址(除了本地回环地址和IPv6地址),并将其输出。

请注意,这段脚本在Linux环境下执行,可能需要确保你的系统中已经安装了所需的命令(如ip、grep、awk、cut)。

将上面内容保存了/root目录下的showip.sh文件中,并cd到/root目录下。

chmod +x ./showip.sh  	#使脚本具有执行权限
./showip.sh 		 #执行脚本

在这里插入图片描述
在这里插入图片描述

二、作为解释器(bash)参数

本系统的解释器(shell)是bash,而我们知道sh是bash的软连接(类似于windows下的快捷方式),则最常用的方法就是“sh 脚本文件名”。
在这里插入图片描述

  • 后面两种,只是故意演示出来而已。请使用上面的方法。理由是:输入少因而效率高。
  • 我们知道sh是命令,而命令后面跟的就叫该命令参数。所以本方法叫“作为解释器的参数”运行脚本。
  • 而该方法运行脚本,会无视脚本内的首行(即首行写与不写都没关系)。为什么?! 因为直接调用了解释器!

5、find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk的常用命令

当涉及到文本处理和数据操作时,下面是一些findgrepxargssortuniqtrcutpastewcsedawk的常用命令:

1. find:用于在文件系统中搜索文件或目录。

  • find /path/to/directory -name "filename":按照文件名在指定目录下搜索文件。
  • find /path/to/directory -type f:找出指定目录下的所有文件。
  • find /path/to/directory -type d:找出指定目录下的所有目录。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2. grep:用于在文件或输入中查找特定模式。

  • grep "pattern" file.txt:在文件中搜索包含指定模式的行。
  • cat file.txt | grep "pattern":在输入流中搜索包含指定模式的行。
    在这里插入图片描述
    在这里插入图片描述

3. xargs:用于从标准输入中读取参数并将其传递给其他命令。

  • find /path/to/directory -name "*.txt" | xargs rm:找到所有以 .txt 结尾的文件并删除它们。

  • find /path/to/directory -name "*.txt" | xargs cat:找到所有以 .txt 结尾的文件并查看它们。
    在这里插入图片描述
    在这里插入图片描述

4. sort:用于对文本进行排序。

  • sort file.txt:对文件中的行按字母顺序进行排序。

  • sort -n file.txt:对文件中的行按数值大小进行排序。
    在这里插入图片描述
    在这里插入图片描述

5. uniq:用于从排序后的输入中筛选出唯一的行。

  • sort file.txt | uniq:对文件中的行排序并消除重复行。

  • sort file.txt | uniq -c:计算每个唯一行的出现次数。
    在这里插入图片描述
    在这里插入图片描述

6. tr:用于字符替换和删除。

  • cat file.txt | tr 'a' 'b':将输入中的所有字母 ‘a’ 替换为 ‘b’。
  • cat file.txt | tr -d 'a':删除输入中的所有字母 ‘a’。
    在这里插入图片描述
    在这里插入图片描述

7. cut:用于从文本中提取指定字段。

  • cut -d ',' -f 1,3 file.csv:以逗号为分隔符,提取CSV文件中的第1和第3个字段。
    在这里插入图片描述

8. paste:用于将多个文件的内容合并为一行。

  • paste file1.txt file2.txt:将两个文件的内容并排合并。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

9. wc:用于计算文件或文本的行数、字数和字符数。

  • wc -l file.txt:计算文件中的行数。
  • echo "Hello, World!" | wc -w:计算输入内容的字数。
    在这里插入图片描述
    在这里插入图片描述

10. sed:用于流式文本编辑。

  • sed 's/pattern/replacement/g' file.txt:将文件中的所有匹配 pattern 的内容替换为 replacement
  • sed '/pattern/d' file.txt:从文件中删除包含 pattern 的行。
    在这里插入图片描述
    在这里插入图片描述

11. awk:用于处理结构化文本数据。

  • awk '{print $1}' file.txt:打印文件中每一行的第一个字段。
  • awk -F ',' '{print NF}' file.csv:计算文件中每一行的字段数。
    在这里插入图片描述

以上只是这些命令中的一些常见用法示例,它们具有更多强大和灵活的功能。你可以查阅命令的文档或在终端上运行 man <command> 来了解更多详细的用法和选项。

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

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

相关文章

MOS、PMOS、NMOS

1、MOS 管 简介 MOS管的英文全称叫 MOSFET(Metal Oxide Semiconductor Field Effect Transistor)&#xff0c;即 金属氧化物半导体型场效应管&#xff0c;属于场效应管中的绝缘栅型。 2、MOS 管工作原理 学习视频链接 &#xff1a; 1、https://www.bilibili.com/video/BV1L54…

代码随想录算法训练营第五十二天|300.最长递增子序列、 674. 最长连续递增序列、 718. 最长重复子数组

最长递增子序列 dp[i]的定义dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度状态转移方程 位置i的最长升序子序列等于j从0到i-1各个位置的最长升序子序列 1 的最大值。 所以&#xff1a;if (nums[i] > nums[j]) dp[i] max(dp[i], dp[j] 1);dp[i]的初始化 每一…

动态地图开发的未来应用场景有哪些?

动态地图开发应用已经成为现代数字世界中不可或缺的一部分。这种技术的灵活性为公司和组织提供了一种简单却强大的方式&#xff0c;以在现实世界地图上显示各种信息。无论是用于自动导航系统、气象预报、实时交通状况或利用商业洞察力获取市场数据&#xff0c;动态地图开发应用…

赛效:视频怎么转音频怎么转

1&#xff1a;先在浏览器中将91ai工具网站给打开&#xff0c;登录账号后从“音视频工具”中选择视频转音频功能&#xff0c;我们就可以进入到视频转音频的功能界面了。 2&#xff1a;点击上传视频文件&#xff0c;需要注意的是非会员不能上传超过5M的视频。 3&#xff1a;输入格…

Maven高级操作--分模块设计、聚合、继承和私服

一、分模块设计与开发 1.1 分模块设计 问题&#xff1a;当项目做大做强的时候&#xff0c;前面的基础Spring开发的框架都无法满足java大型项目的维护和复用&#xff0c;而且团队合作也会造成较大的困难。所以就需要分模块设计&#xff1a;将项目按照功能拆分成若干个子模块&a…

JDK8新特性-下部

文章目录 一、Stream结果收集1.1 结果收集到集合中1.2 结果集收集到数组中1.3 对流中数据做聚合运算1.4 对流中数据做分组操作1.5 对流中的数据做分区操作1.6 对流中的数据做拼接 二、并行的Stream流2.1 串行的Stream流2.2 并行流2.2.1获取并行流2.2.2 并行流操作 2.3 串行流与…

深入探究小程序技术:构建轻巧高效的移动应用

&#x1f482; 个人网站:【海拥】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 1.背景&#xff1a;2. …

SwiftUI async/await 并发代码提示 Non-sendable type cannot cross actor boundary 警告的解决

问题现象 从 Swift 5.5 开始, 为我们引入了新的 async/await 并发模型,使用它我们可以用更简洁的代码来实现复杂的并发功能。 async/await 并发模型同时也对大部分系统框架中的类型做了扩展,让它们在并发上重新“焕发青春”。 不过,我们在用新并发模型撸码的过程中,有…

深度学习训练营之中文文本分类识别

深度学习训练营之中文文本分类识别 原文链接环境介绍前置工作设置环境设置GPU加载数据 构建词典生成数据批次和迭代器模型定义定义实例 定义训练函数和评估函数模型训练模型预测 原文链接 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f366;…

SpringBoot(实用开发篇)

SpringBoot实用开发篇 第三方属性bean绑定 ConfigurationProperties 使用ConfigurationProperties为第三方bean绑定属性 配置文件 datasource:driverClassName: com.mysql.jdbc.Driver servers:ipAddress: 192.168.0.1port: 80timeout: -1ServerConfig类&#xff1a; Dat…

PIC16F877A Proteus仿真太阳能市电互补供电系统蓄电池充电 -0051

PIC16F877A Proteus仿真太阳能市电互补供电系统蓄电池充电 -0051 Proteus仿真小实验&#xff1a; PIC16F877A Proteus仿真太阳能市电互补供电系统蓄电池充电 -0051 功能&#xff1a; 硬件组成&#xff1a;PIC16F877A单片机 LCD1602显示器AC220V市电转59V直流蓄电池充电电路…

机器学习讲了什么?如果你看不懂南瓜书和花书,先看看这本机器学习图解书

优达学城创始人Sebastian Thrun作序推荐&#xff0c; 机器学习布道者、Google和Apple前工程师Luis G. Serrano 倾情分享&#xff1a; 以图形的方式讲解机器学习经典算法和技术。 近年来&#xff0c;“人工智能”“机器学习”和“深度学习”蓬勃发展&#xff0c;各种新的技术和…

9-1小波变换 小波分解和重构(matlab程序)

1.简述 一、小波处理信号的一般过程 1&#xff09;取样&#xff1a;这是一个预处理步骤。若信号连续&#xff0c;那么必须以能够捕获原信号必要细节的速率取样。不同的应用决定了不同的取样率。如&#xff1a;原信号的细节频率为20kHz&#xff0c;由Nyquist采样定理&#xff0c…

剑指 Offer !37. 序列化二叉树

剑指 Offer 37. 序列化二叉树 请实现两个函数&#xff0c;分别用来序列化和反序列化二叉树。 你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑&#xff0c;你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序…

Day43

思维导图 深拷贝和浅拷贝 1> 如果类中有指针成员时&#xff0c;如果没有显性的定义拷贝构造和拷贝赋值函数&#xff0c;系统默认提供的都只能实现浅拷贝&#xff0c;需要显性定义出深拷贝函数&#xff0c;为了完成指针成员的独立赋值&#xff0c;如果类中没有指针成员&#…

java面向对象之java继承

文章目录 一、java继承总结 一、java继承 继承的概念 继承是java面向对象编程技术的一块基石&#xff0c;因为它允许创建分等级层次的类。 继承就是子类继承父类的特征和行为&#xff0c;使得子类对象&#xff08;实例&#xff09;具有父类的实例域和方法&#xff0c;或子类…

Java之集合Collection

Collection接口有两个子接口&#xff1a;List(链表|线性表)和Set(集) ---|Collection: 单列集合---|List: 有存储顺序, 可重复---|ArrayList: 数组实现, 查找快, 增删慢由于是数组实现, 在增和删的时候会牵扯到数组增容, 以及拷贝元素. 所以慢。数组是可以直接按索引查找, 所以…

less和sass

less和sass 相比于css解决了什么问题&#xff1f; 答案&#xff1a;less和sass可以嵌套&#xff0c;可以使用变量&#xff1b;而css不可以 BEM/CSS modules/Atomic CSS/CSS in JS&#xff0c;这些方案应用于工程化中&#xff0c;解决了的问题是&#xff1a; 多人协同/大规模场…

Leonard ai 画明代皇帝肖像

链接&#xff1a; https://app.leonardo.ai/ai-generations prompt&#xff1a; Highly detailed doodle illustration of a Chinese emperor centered, isometric, mural, doodle, composition, shape, pattern, vector art ready to print Negative Prompt&#xff1a; …

mysql 触发器

触发器&#xff1a;当对某张表进行 INSERT、DELETE、UPDATE 操作时&#xff0c;会自动触发定义的触发器中的操作。顾名思义&#xff0c;当我们为某张表定义触发器后&#xff0c;向表中添加、删除、修改数据时&#xff0c;会触发触发器中定义的操作&#xff0c;触发器像是一个事…