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

这篇具有很好参考价值的文章主要介绍了【运维工程师学习三】Linux中Shell脚本编写。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

 whereis sh

【运维工程师学习三】Linux中Shell脚本编写
但这种在命令行中的命令是即时输出结果的,不能重复使用(重复输入可以重复使用,但如果是要多行输入的命令则极不方便),要想方便重复使用同一个功能就把多行的命令放到一个标准格式的文件中,这就是shell编程了。
所以所谓shell编程就是一行或多行不同功能的shell命令的集合!这个shell命令集合的文件叫shell script(shell脚本)。

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

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

find /-name *.sh

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

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

首行通常是#!/bin/sh#!/bin/bash#!/usr/bin/sh或#!/usr/bin/bash开头(或者你还会看到其它的路径,或者全部有之)。该行的意思是,它告诉系统这个脚本需要什么解释器(即是什么shell,本系统是bash)来执行。
【运维工程师学习三】Linux中Shell脚本编写
从第二行开始,凡是以#开头的行,说明该行均不会被执行,多用来作注释、说明。

注意:是以行为单位的。

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

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 		 #执行脚本

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

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

本系统的解释器(shell)是bash,而我们知道sh是bash的软连接(类似于windows下的快捷方式),则最常用的方法就是“sh 脚本文件名”。
【运维工程师学习三】Linux中Shell脚本编写

  • 后面两种,只是故意演示出来而已。请使用上面的方法。理由是:输入少因而效率高。
  • 我们知道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:找出指定目录下的所有目录。

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

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

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

  • grep "pattern" file.txt:在文件中搜索包含指定模式的行。
  • cat file.txt | grep "pattern":在输入流中搜索包含指定模式的行。
    【运维工程师学习三】Linux中Shell脚本编写
    【运维工程师学习三】Linux中Shell脚本编写

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

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

  • find /path/to/directory -name "*.txt" | xargs cat:找到所有以 .txt 结尾的文件并查看它们。
    【运维工程师学习三】Linux中Shell脚本编写
    【运维工程师学习三】Linux中Shell脚本编写

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

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

  • sort -n file.txt:对文件中的行按数值大小进行排序。
    【运维工程师学习三】Linux中Shell脚本编写
    【运维工程师学习三】Linux中Shell脚本编写

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

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

  • sort file.txt | uniq -c:计算每个唯一行的出现次数。
    【运维工程师学习三】Linux中Shell脚本编写
    【运维工程师学习三】Linux中Shell脚本编写

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

  • cat file.txt | tr 'a' 'b':将输入中的所有字母 ‘a’ 替换为 ‘b’。
  • cat file.txt | tr -d 'a':删除输入中的所有字母 ‘a’。
    【运维工程师学习三】Linux中Shell脚本编写
    【运维工程师学习三】Linux中Shell脚本编写

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

  • cut -d ',' -f 1,3 file.csv:以逗号为分隔符,提取CSV文件中的第1和第3个字段。
    【运维工程师学习三】Linux中Shell脚本编写

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

  • paste file1.txt file2.txt:将两个文件的内容并排合并。
    【运维工程师学习三】Linux中Shell脚本编写
    【运维工程师学习三】Linux中Shell脚本编写
    【运维工程师学习三】Linux中Shell脚本编写

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

  • wc -l file.txt:计算文件中的行数。
  • echo "Hello, World!" | wc -w:计算输入内容的字数。
    【运维工程师学习三】Linux中Shell脚本编写
    【运维工程师学习三】Linux中Shell脚本编写

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

  • sed 's/pattern/replacement/g' file.txt:将文件中的所有匹配 pattern 的内容替换为 replacement
  • sed '/pattern/d' file.txt:从文件中删除包含 pattern 的行。
    【运维工程师学习三】Linux中Shell脚本编写
    【运维工程师学习三】Linux中Shell脚本编写

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

  • awk '{print $1}' file.txt:打印文件中每一行的第一个字段。
  • awk -F ',' '{print NF}' file.csv:计算文件中每一行的字段数。
    【运维工程师学习三】Linux中Shell脚本编写

以上只是这些命令中的一些常见用法示例,它们具有更多强大和灵活的功能。你可以查阅命令的文档或在终端上运行 man <command> 来了解更多详细的用法和选项。文章来源地址https://www.toymoban.com/news/detail-514263.html

到了这里,关于【运维工程师学习三】Linux中Shell脚本编写的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux运维工程师面试题(2)

    目录 Linux运维工程师面试题(2) 1 访问一个网站的流程 2 TCP 三次握手,四次挥手 3 apache 和 nginx 有哪几种虚拟主机 4 TCP 和 UDP 的区别 5 nginx 和 apache 的区别 6 什么是反向代理,什么是正向代理,区别是什么? 7 cookie和session的区别 8 nginx 调优 9 系统出现大量的 time_wait 问题怎么

    2024年02月11日
    浏览(27)
  • Linux运维工程师面试题(6)

    目录 Linux运维工程师面试题(6) 1 数据库事务的四个特性及含义 2 mysql 的 sql 语句怎么优化 3 varchar 与 char 的区别是什么?大小限制?utf8 字符集下 varchar 最多能存多少个字符? 4 索引有什么用? 5 sql 注入是怎么产生的,如何防止? 6 csrf 是什么?如何防范? 7 如何加强 MySQ

    2024年02月10日
    浏览(36)
  • Linux运维工程师面试题(7)

    目录 Linux运维工程师面试题(7) 1 常用的 ansible 模块有哪些 2 说一下 ansible 使用 roles 编排的目录结构 3 docker 六大命名空间 namespace 4 cgroups 的作用 5 runc 的作用 6 docker 常用的命令 7 docker 存储引擎有哪些,区别是什么 8 进入 docker 容器有几种方法,区别是什么 9 Dockerfile 常用指

    2024年02月10日
    浏览(37)
  • Linux运维工程师面试题(8)

    目录 Linux运维工程师面试题(8) 1 docker 的网络类型,使用场景 2 CMD 和 ENTRYPOINT 的区别 3 怎么减小 dokcer 镜像的大小 4 现有一个正在运行的容器,容器中没有 ps、top、netstat、ss、ip、lsof等命令,怎么查看容器内进程及pid和打开的端口 5 如何临时退出⼀个正在交互的容器的终端

    2024年02月09日
    浏览(35)
  • Linux运维工程师面试题(9)

    目录 Linux运维工程师面试题(9) 1 pod 的生命周期 2 探针类型 3 探针方式 4 探针结果 5 Pod 重启策略 6 镜像获取策略 7 k8s 的服务类型 8 k8s中 service 和 ingress 的区别 9 有状态和无状态服务的区别 10 k8s 中 service 是做什么的? 祝各位小伙伴们早日找到自己心仪的工作。 持续学习才

    2024年02月09日
    浏览(48)
  • Linux运维工程师面试题(1)

    目录 Linux运维工程师面试题(1) 1 别名、内部命令、外部命令的执行顺序 2 linux 系统启动流程 3 破解用户密码的方法 4 忘记 grub 密码怎么解决 5 硬盘空间满了怎么处理,怎么找到硬盘中的大文件 6 硬盘明明有很多空间,为什么无法存储文件 7 进程使用内存问题 7.1 内存泄露:

    2024年02月11日
    浏览(50)
  • 【运维工程师学习】Debian安装

    选择镜像文件 进入安装选择界面 graphical install 图形安装 Install 安装系统 advanced options 高级选项 Help 帮助 accessible dark contrast installer menu 无障碍暗色对比度安装程序菜单 (旨在为视力有障碍的用户提供更好的可访问性,提供了: 高对比度主题、大字体选项、屏幕阅读器支持) In

    2024年02月12日
    浏览(42)
  • 【运维工程师学习二】OS系统管理

    操作系统管理着所有的硬件资源,负责响应各个应用的资源请求。应用还没有运行的时候就只是一堆各种各样的文件( 二进制文件、文本文件 等等),运行的时候,相对系统而言就是进程。比如你启动 apache (linux下知名的web服务端),在系统中就启动了一个(或多个,假如

    2024年02月11日
    浏览(32)
  • 【运维工程师学习五】数据库之MariaDB

    db根据存储模型划分,数据库类型主要可分为: 网状数据库(Network Database)、关系数据库(Relational Database)、树状数据库(Hierarchical Database)、面向对象数据库(Object-oriented Database) 等。商业应用中主要是关系数据库,而关系数据库中常见的软件有比如Oracle、DB2、Sybase、MS SQL Server、In

    2024年02月16日
    浏览(35)
  • 运维工程师第一阶段windows的学习

    计算机历史 1946-1956 电子管时代 美国兵夕法尼亚大学 5000次/s 1956-1964 晶体管时代 几十万次 1964-1972 集成电路时代 几百万到几千万 1972-至今 大规模和超大规模集成电路 几亿次到几百万亿次 计算机硬件组成 分为内设设备和外设设备。 cpu,主板,cpu散热器,内存,硬盘和光驱,显

    2024年02月15日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包