【运维工程师学习三】Linux中Shell脚本编写

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

    • 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程序分类

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.hqwc.cn/news/12994.html

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

相关文章

Python学习笔记(十八)————python包相关

目录 &#xff08;1&#xff09;python包作用 &#xff08;2&#xff09;自定义python包 &#xff08;3&#xff09;导入自定义包 方式一&#xff1a; 方式二&#xff1a; &#xff08;4&#xff09;导入第三方包 ①pip安装 ②PyCharm安装 &#xff08;1&#xff09;pytho…

抖音seo矩阵系统源代码分享--开发者

一、技术开发注意事项&#xff1a; 目录 一、技术开发注意事项&#xff1a; 二、抖音SEO账号矩阵系统源码思路 三、抖音SEO底层开发逻辑主要包括以下几个方面&#xff1a; 四、 功能规划 五、 代码开发展示 确定业务需求&#xff1a;在开发前&#xff0c;需要明确抖音矩阵…

ChatGPT落地场景探索-数据库与大模型

目录 openGauss介绍 openGauss介绍 数据库与大模型 openGauss介绍 大模型与数据库 大模型为数据库带来的机遇 大模型解决数据库问题的挑战 数据库为大模型带来的价值 大模型大模型的发展趋势 趋势产品&#xff1a;Chat2DB 简介 特性 生产应用&#xff1a;基…

为什么需要多语言并行机器翻译?

随着全球化的加速和不同语言之间的交流需求不断增长&#xff0c;多语言机器翻译&#xff08;Multilingual Parallel Machine Translation&#xff09;成为一个备受关注的领域。传统上&#xff0c;机器翻译系统主要集中于一对特定语言之间的翻译&#xff0c;但这种单一语言对的模…

MySQL索引介绍及底层数据结构B+树介绍

索引 1. 索引概述1.1 索引1.2 索引的优缺点1.2.1 优点1.2.2 缺点 2. InnoDB中的索引2.1 主键索引设计方案2.2 索引底层数据结构2.3 常见索引2.3.1 聚簇索引2.3.1.1 优点2.3.1.2 缺点 2.3.2 非聚簇索引2.3.3 联合索引 3. MyISAM中的索引3.1 MyISAM 与 InnoDB对比 1. 索引概述 1…

代码随想录算法训练营第十一天 | 二叉树系列2

二叉树系列2 101 对称二叉树二叉树很重要的一点&#xff1a;确定遍历顺序关于递归代码随想录的代码我的代码(理解后编写) 100 相同的树我的代码 572 另一个树的子树我的代码录友的代码&#xff0c;只用递归&#xff01;&#xff01;&#xff01; 104 二叉树的最大深度重点代码随…

17.OpenCV中的GFTTDetector类

文章目录 GFTTDetector功能OpenCV中GFTTDetector类reference 欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f339;&#x1f339; 这是使用imgproc.hpp中的goodFeaturesToTrack函数封装的类&#xff0c;其使用和goodFeaturesToTrack函数基本相似。 GFTTDetec…

【算法与数据结构】20、LeetCode有效的括号

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;括号匹配是使用栈解决的经典问题。做这道题首先要分析什么时候括号不匹配。1、右括号多余 ( { [ ] } )…

PCL 法向量估计源码学习

一、思路&#xff1a; 二、源码 #ifndef PCL_FEATURES_IMPL_NORMAL_3D_H_ #define PCL_FEATURES_IMPL_NORMAL_3D_H_#include <pcl/features/normal_3d.h>/// template <typename PointInT, typename PointOutT> void pcl::NormalEstimation<PointInT, PointOutT…

【stability.ai】SDXL:改进高分辨率图像合成的潜在扩散模型

github&#xff1a;https://github.com/Stability-AI/stablediffusion 试用&#xff1a; https://clipdrop.co/stable-diffusion https://dreamstudio.ai/ 介绍 近年来&#xff0c;深度生成建模在自然语言、音频和视觉媒体等各个数据领域取得了巨大的突破。本文将重点关注视…

nohup命令解决SpringBoot/java -jar命令启动项目运行一段时间自动停止问题

问题描述&#xff1a; 在centos7上部署多个springcloud项目。出现了服务莫名其妙会挂掉一两个的问题&#xff0c;重新启动挂掉的服务之后又会出现其他服务挂掉的情况&#xff0c;查看启动日志也并没有发现有异常抛出。令人费解的是所有的服务都是通过nohup java -jar xxx.jar …

TCP / IP 参考模型

TCP / IP 参考模型 5层参考模型5层参考模型5层模型的数据封装 5层参考模型 5层参考模型 综合 OSI 和 TCP/IP 的优点应用层: 支持各种网络应用 FTP, SMTP, HTTP 传输层: 进程-进程的数据传输 TCP, UDP 网络层: 源主机到目的主机的数据分组路由与转发 IP协议、路由协议等 链路层…