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

news2024/12/26 11:22:51

【运维工程师学习三】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.coloradmin.cn/o/704889.html

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

相关文章

C++ 中的字符串类

历史遗留问题 C 语言不支持真正意义上的字符串 C 语言用字符数组和一组函数实现字符串操作 C 语言不支持自定义类型&#xff0c;因此无法获得字符串类型 解决方案 从 C 到 C 的进化过程引入了自定义类型 在 C 中可以通过类完成字符串类型的定义 问题&#xff1a; C 中的…

华为云CodeArts实践初体验活动即将结束,抓紧报名,赢华为耳机!

【活动简介】 CodeArts是华为自研一站式软件开发生产线&#xff0c;软件开发全流程覆盖&#xff1a;支持需求管理、代码托管、流水线、代码检查、编译构建、部署、测试、制品仓库等全生命周期软件开发服务&#xff1b;开箱即用&#xff0c;云上开发。本次实践体验活动带你初步…

项目——学生信息管理系统4

目录 学生模块的功能实现 1. 创建Student实体类型 编写StudentDao 提供添加学生的方法 创建 学生添加页面 创建 AddStudentFrm 页面 注意创建成JInternalFrame类型 注意&#xff1a;把main方法注释掉 回到 MainFrm.java 页面 给添加学生按钮绑定事件 当打开 AddStudentF…

从裸机启动开始运行一个C++程序(五)

先序文章请看 从裸机启动开始运行一个C程序&#xff08;四&#xff09; 从裸机启动开始运行一个C程序&#xff08;三&#xff09; 从裸机启动开始运行一个C程序&#xff08;二&#xff09; 从裸机启动开始运行一个C程序&#xff08;一&#xff09; 把MBR和内核源码拆开 拆分M…

实现表格合并单元格、在表格做输入处理以及数值统计

需求&#xff1a;表格样式涉及到合并单元格&#xff0c;功能上可以在表格最后一列输入分数&#xff0c;并自动统计总分。 大体样式 代码&#xff1a; 表格&#xff1a; :span-method 属性用来合并单元格 :summary-method 属性用来实现自动统计 // 合并单元格操作 objectSpa…

头文件的使用,什么是头文件?

*## 头文件的使用*为什么要加这个#include include表示包含的意思&#xff0c;就是把iostream这个文件拷贝到main.c这里 有什么意义呢&#xff1f; 有什么意义呢&#xff1f;都是明星同时也是小卡 所以需要包含头文件去查找一下 所以头文件就是相对应功能函数的集合。要想使用…

java实现布隆过滤器(手写和Guava库提供的)

目录 前言 布隆过滤器的原理 插入​编辑 查询 删除 布隆过滤器优缺点 优点&#xff1a; 缺点&#xff1a; 代码实现 方式一&#xff1a; Google Guava 提供的 BloomFilter 类来实现布隆过滤器 到底经过几次哈希计算 解决缓存穿透 方式二&#xff1a;手写 前言 在学…

基于PyQt5的桌面图像调试仿真平台开发(1)环境搭建

系列文章目录 基于PyQt5的桌面图像调试仿真平台开发(1)环境搭建 基于PyQt5的桌面图像调试仿真平台开发(2)UI设计和控件绑定 基于PyQt5的桌面图像调试仿真平台开发(3)黑电平处理 基于PyQt5的桌面图像调试仿真平台开发(4)白平衡处理 基于PyQt5的桌面图像调试仿真平台开发(5)…

Git:git merge和git rebase的区别

分支合并 git merge是用来合并两个分支的。比如&#xff1a;将 b 分支合并到当前分支。同样git rebase b&#xff0c;也是把 b 分支合并到当前分支。他们的 「原理」如下&#xff1a; 假设你现在基于远程分支"origin"&#xff0c;创建一个叫"mywork"的分支…

【爬虫】对某某贴吧主页的爬虫分析+源码

1. 网站分析 想要的内容有标题、时间和帖子跳转链接 查看网站源代码&#xff0c;发现想要的内容就在里面&#xff0c;那就好办了&#xff0c;直接上正则&#xff0c;当然beautifulsoup也不是不可以 2. Python源码 import requests import re from prettytable import PrettyTa…

“生鲜蔬”APP的设计与实现

1.引言 在这个科技与网络齐头并进的时代&#xff0c;外卖服务正在飞速发展&#xff0c;人们对外卖APP系统功能需求越来越多&#xff0c;开发APP的人员对自己的要求也要越来越高&#xff0c;要从所做APP外卖系统所实现的功能和用户的需求来对系统进行设计&#xff0c;还需要与当…

基于SpringBoot+vue的人职匹配推荐系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

CC1310 CC1310F128RSMR 超低功耗SUB-1GHz 无线 MCU芯片

1 器件概述 1 1 特性 • 微控制器 – 性能强大的 Arm Cortex -M3 处理器 – EEMBCCoreMark评分&#xff1a;142 – EEMBC ULPBench™评分&#xff1a;158 – 时钟速率最高可达 48MHz – 32KB、64KB 和 128KB 系统内可编程闪存 – 8KB 缓存静态随机存取存储器 (SRAM) &#xff…

农业副业产品求购供应发布市场行情VIP会员公众号小程序开源版开发

农业副业产品求购供应发布市场行情VIP会员公众号小程序开源版开发 后台一键同步全国近200家农产品批发市场商品包括&#xff0c;蔬菜、水果、水产、粮油和农副产品等的价格。 前端VIP权益功能&#xff0c;开通VIP会员后&#xff0c;可以开启VIP会员标识。可无限制查看全国市场…

Scrapy框架之Mongo安装和与关系型数据库比较

目录 Windows安装与启动MongoDB 下载 启动MongoDB 通过命令启动 脚本 快速学习方法 与关系型数据库比较 什么是BSON Windows安装与启动MongoDB 下载 企业版-收费 社区版-免费 下载Mongodb Download MongoDB Community Server | MongoDB 选择版本 稳定版5.0.9 选择平台…

前端工程化 | vue3+ts+jsx+sass+eslint+prettier 配置化全流程

起因&#xff1a; 前端开发是一个工程化的流程。 包括持续集成、持续部署。 我认为集成 的第一方面就是开发&#xff0c;在前端项目开发中&#xff0c;需要保证代码格式规范的统一、代码质量、提交的规划。而这些要求需要通过各种插件来保证规范化和流程化开发。 如何配置这…

大数据的金融数据读取及分析(二)

一、注册和获取token 参考大数据的金融数据读取及分析&#xff08;一&#xff09;大数据的金融数据读取及分析&#xff08;-&#xff09;_石工记的博客-CSDN博客 二、获取股市信息 需注意的是&#xff0c;利用tushare接口获取部分信息时对积分有不同的要求&#xff0c;积分不…

后室主题 Game Jam

在后室主题 Game Jam 中探索无尽的深渊&#xff01; 向所有富有冒险精神的游戏开发者和创作者发出召集令&#xff01;准备好潜入未知领域&#xff0c;将令人毛骨悚然的后室之谜变为现实吗&#xff1f;加入我们&#xff0c;参加与 Game Maker 合作举办的令人振奋的游戏竞赛吧&am…

【C语言】GNU make 和 Makefile :构建工具与构建描述文件的力量

本文将详细介绍make和Makefile&#xff0c;它们是软件开发中常用的构建工具和构建描述文件。本文将探讨make的作用、原理和用法&#xff0c;以及Makefile的结构、语法和常见用法。通过了解这些工具&#xff0c;开发者可以更高效地管理和构建复杂的软件项目。 引言一、make1.1 m…

Java8新特性详解

陈老老老板 说明&#xff1a;新的专栏&#xff0c;本专栏专门讲Java8新特性&#xff0c;把平时遇到的问题与Java8的写法进行总结&#xff0c;需要注意的地方都标红了&#xff0c;一起加油。 本文是介绍Java8新特性与常用方法&#xff08;此篇只做大体介绍了解&#xff0c;之后会…