【运维工程师学习三】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.mzph.cn/news/1088.shtml

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

相关文章

网络协议与攻击模拟-17-DNS协议-报文格式

二、DNS 查询 客户机想要访问www.baidu.com&#xff0c;根据自己的 TCP / IP 参数&#xff0c;向自己的首选 DNS 服务器发送 DNS 请求 首选 DNS 收到客户机的请求后&#xff0c;会去查询自己的区域文件&#xff0c;找不到www.baidu.com的 IP 地址信息&#xff08;将请求转发到…

MYSQL 5.7.17 安装版 的配置文件

解压版解压后都有 my.ini配置文件&#xff0c;安装版要查找这个配置文件可以查看 MYSQL Workbench --> 左侧 INSTANCE --> Options File &#xff0c;然后可以看到底部 Configuration File所处的位置&#xff0c;即为my.ini的路径。

Jupyter notebook添加与删除kernel

目录 1 添加虚拟环境的kernel 2 删除jupyter notebook已有的kernal 3 切换内核与查看当前内核 4 添加C语言的kernel 5 添加python2的kernel 6 添加java语言的kernel 6.1 sudo apt install default-jre 6.2 下载并安装 ijava 6.3 sudo apt install openjdk-11…

TortoiseGit 入门指南05:推送和拉取

本节所讲内容均涉及到 远端版本库。 版本库 的概念在《TortoiseGit 入门指南02&#xff1a;创建和克隆仓库》中提到过&#xff0c;它是工作目录下面的一个名为 .git 的隐藏目录&#xff0c;我们每一次提交、每一个分支都会保存在版本库中。这个版本库就在我们电脑上的某个文件…

鸽了百万用户四年的赛博皮卡终于要来啦

作者 | Amy 编辑 | 德新 本月15号&#xff0c;特斯拉官方宣布&#xff0c;第一辆 赛博皮卡已在特斯拉得州工厂下线。 而就在本月初&#xff0c;马斯克还发推预热了一波&#xff0c;「开着赛博皮卡在奥斯汀&#xff08;特斯拉得州工厂所在地&#xff09;溜了一圈&#xff01…

THREE.JS镜头随鼠标晃动效果

为了让动画更灵活并且简单 借助gsap让其具有更多可能&#xff0c;在未来更容易扩充其他动效 gsap Dom跟随鼠标移动 gsap.quickTo() 首先要监听鼠标移动&#xff0c;并且将移动的值转换到 -1 和 1 之间 方便处理 private mousemove(e: MouseEvent) {const x (e.clientX / inner…

华为配置LLDP基本功能

华为配置LLDP基本功能 1.什么是lldp协议 定义 LLDP(Link Layer Discovery Protocol)是IEEE 802.1ab中定义的链路层发现协议。LLDP是一种标准的二层发现方式,可以将本端设备的管理地址、设备标识、接口标识等信息组织起来,并发布给自己的邻居设备,邻居设备收到这些信息后将…

SSH远程直连Docker容器

文章目录 1. 下载docker镜像2. 安装ssh服务3. 本地局域网测试4. 安装cpolar5. 配置公网访问地址6. SSH公网远程连接测试7.固定连接公网地址8. SSH固定地址连接测试8. SSH固定地址连接测试 转载自cpolar极点云文章&#xff1a;SSH远程直连Docker容器 在某些特殊需求下,我们想ssh…

45、Spring Boot自动配置原理

Spring Boot自动配置原理 lmport Configuration Spring spi 自动配置类由各个starter提供&#xff0c;使用Configuration Bean定义配置类&#xff0c;放到META-INF/spring.factories下使用Spring spi扫描META-INF/spring.factories下的配置类使用lmport导入自动配置类

[游戏开发][Unity] TPS射击游戏相机实现

技术难点&#xff1a;由于是第三人称射击游戏&#xff0c;角色和相机之间有夹角&#xff0c;所以枪口点和准星是有误差的&#xff0c;下面是和平精英手游截图&#xff0c;我用AK射击zhuzi using System.Collections; using System.Collections.Generic; using UnityEngine;publ…

❤️创意网页:如何创建一个漂亮的3D正六边形

✨博主&#xff1a;命运之光 &#x1f338;专栏&#xff1a;Python星辰秘典 &#x1f433;专栏&#xff1a;web开发&#xff08;简单好用又好看&#xff09; ❤️专栏&#xff1a;Java经典程序设计 ☀️博主的其他文章&#xff1a;点击进入博主的主页 前言&#xff1a;欢迎踏入…

上手vue2的学习笔记5之在vue2项目中调用elment-ui

前言 上手vue2的学习笔记4之搭建vue环境 参考链接&#xff1a;vue2.0项目引入element-ui 一、安装elment-ui 进入搭建的vue项目中 cd vue_bing_test 安装 element npm i element-ui二、引入elment-ui elment官方教程 将main.js改成如下内容&#xff1a; import Vue fro…

我们正在开发一套组件库,欢迎你的加入~

项目地址 github地址 可以先点进来康康~ 技术栈 目前我们整体采用的是vue3typescriptless作为整体的开发的选择 需要说的是&#xff0c;我们并没有采用很多组件库采用的TSX的写法&#xff0c;而是选择了SFC的写法&#xff0c;这是因为我们觉得对于大部分的vue开发者来说&am…

MySQL八股学习记录4事务的实现from小林coding

MySQL八股学习记录4事务的实现from小林coding 事务的概念与特性并行事务引发的问题脏读不可重复读幻读 MySQL的应对策略InnoDB引擎可重复读详解ReadView在MVCC中的工作方式两种隔离级别通过MVCC实现幻读被完全解决了吗 事务的概念与特性 概念:一个操作要么执行成功,要么回滚到…

ORACLE实时SQL监控视图

引言 实时的SQL监控&#xff08;Real Time SQL Monitoring&#xff09;是Oracle 11g的一个新特性&#xff0c;它是一项强大的工具&#xff0c;用于监视和分析正在执行的SQL语句的性能和执行计划。该功能允许我们实时地跟踪SQL查询的执行过程&#xff0c;以及了解其资源消耗、等…

Java的五种数据类型解析

Java的五种数据类型解析 不知道大家对java的简单数据类型是否了解&#xff0c;下面针对Java的五种类型简单数据类型表示数字和字符&#xff0c;进行详细的讲解和分析。 一、简单数据类型初始化 在Java语言中&#xff0c;简单数据类型作为类的成员变量声明时自动初始化为默认值…

Ext JS中定义和使用类Ext JS风格的html 按钮

Ext JS 的按钮样式如下: 按钮的背景色默认为应用的主色调或是灰色系, 也可以通过样式设置按钮的背景色, 详细可以参考: Ext JS 如何设置工具栏按钮和一般按钮保持统一样式 但是, 在实际开发的场景中有可能某些按钮是不能通过Ext JS的Button 类进行创建的, 但是页面效果…

如何快速入门「组织结构图」?

组织结构图&#xff0c;对于公司老板和HR可谓是家常便饭&#xff0c;公司发展好&#xff0c;组织结构要升级和调整&#xff0c;人员“正常”流动&#xff0c;都需要用到它。组织结构图可以让人快速的了解公司的行政结构和权利体系&#xff0c;也是让新员工或客户快速了解公司相…

JAVA+Selenium最简单的处理登录弹窗的方式

在做自动化测试遇到需要处理登录弹窗情况&#xff0c;例如我的用户名为admin, 密码为admin, 那么想要登录http://10.10.168.1, 只需要使用以下链接访问即可立即登录, 并免除弹窗: http://账号:密码网址

composer的劈坑

现在是php8盛行的天下&#xff0c;安装php8我就不多说了&#xff0c;宝塔、小出面板一大堆&#xff0c;一键安装。真心说方便。&#xff08;好吧&#xff0c;不打广告了&#xff09;&#xff0c;以下是针对 linux 系统 1、安装composer 安装composer之前&#xff0c;需要要先在…