RHCE——十三、Shell自动化运维编程基础,2024年最新【面试必会

本文详细介绍了Shell编程的基础知识,包括为何学习Shell、Shell的起源、概念及其作为脚本语言的角色。文中强调了Shell编程在运维自动化中的重要性,并提供了学习建议和编写规范,帮助读者掌握Shell脚本的编写技巧。此外,还提到了脚本执行的不同方法,以增强实际操作能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注运维)
img

正文

RHCE板块

欢迎来到我的博客,这里是Linux板块,配合之前RHCSA进阶,希望我的博客可以帮助到您,感谢您的阅读,有什么问题还希望一起探讨交流,感谢各位的支持,感谢!

0、RHCSA——使用Linux搭建一个简单的论坛(这里即可跳转Linux基础内容)
https://blog.youkuaiyun.com/weixin_63172698/article/details/130977137?spm=1001.2014.3001.5501
1、RHCE——一、安装部署及例行性工作
https://blog.youkuaiyun.com/weixin_63172698/article/details/132378717?spm=1001.2014.3001.5501
2、RHCE——二、时间服务器
https://blog.youkuaiyun.com/weixin_63172698/article/details/132388581?spm=1001.2014.3001.5501
3、RHCE——三、远程连接服务器
https://blog.youkuaiyun.com/weixin_63172698/article/details/132391288?spm=1001.2014.3001.5501
4、RHCE——四、Web服务器(理论篇)
https://blog.youkuaiyun.com/weixin_63172698/article/details/132426298?spm=1001.2014.3001.5501
5、RHCE——五、Web服务器及内网穿透(实验篇)
https://blog.youkuaiyun.com/weixin_63172698/article/details/132425515?spm=1001.2014.3001.5501
6、RHCE——六、基于https协议的静态网站
https://blog.youkuaiyun.com/weixin_63172698/article/details/132445286?spm=1001.2014.3001.5501
7、RHCE——七、搭建云存储器
https://blog.youkuaiyun.com/weixin_63172698/article/details/132453897?spm=1001.2014.3001.5501
8、RHCE——八、DNS域名解析服务器
https://blog.youkuaiyun.com/weixin_63172698/article/details/132522246?spm=1001.2014.3001.5501
9、RHCE——九、SELinux
https://blog.youkuaiyun.com/weixin_63172698/article/details/132526882?spm=1001.2014.3001.5501
10、RHCE——十、防火墙、iptables、firewalld
https://blog.youkuaiyun.com/weixin_63172698/article/details/132527048?spm=1001.2014.3001.5501
11、RHCE——十一、NFS服务器
https://blog.youkuaiyun.com/weixin_63172698/article/details/132545080?spm=1001.2014.3001.5501
12、RHCE——十二、Mysql服务
https://blog.youkuaiyun.com/weixin_63172698/article/details/132559298?spm=1001.2014.3001.5501
13、RHCE——十三、Shell自动化运维编程基础
https://blog.youkuaiyun.com/weixin_63172698/article/details/132609269?spm=1001.2014.3001.5501
14、RHCE——十四、变量和引用
https://blog.youkuaiyun.com/weixin_63172698/article/details/132625329?spm=1001.2014.3001.5501
15、RHCE——十五、shell条件测试
https://blog.youkuaiyun.com/weixin_63172698/article/details/132625540?spm=1001.2014.3001.5501
16、RHCE——十六、流程控制之条件判断、循环
https://blog.youkuaiyun.com/weixin_63172698/article/details/132626491?spm=1001.2014.3001.5501
17、RHCE——十七、文本搜索工具-grep、正则表达式
https://blog.youkuaiyun.com/weixin_63172698/article/details/132636679?spm=1001.2014.3001.5501
18、RHCE——十八、shell编程之sed
https://blog.youkuaiyun.com/weixin_63172698/article/details/132675880?spm=1001.2014.3001.5501
19、RHCE——十九、shell编程之awk
https://blog.youkuaiyun.com/weixin_63172698/article/details/132712522?spm=1001.2014.3001.5501
20、RHCE——二十、Ansible及安装与配置
https://blog.youkuaiyun.com/weixin_63172698/article/details/132743283?spm=1001.2014.3001.5501
21、RHCE——二十一、Ansible模块
https://blog.youkuaiyun.com/weixin_63172698/article/details/132743390?spm=1001.2014.3001.5501

一、为什么学习和使用Shell编程

  • 简单易学
  • 解释性语言,不需要编译即可执行
  • 对于一个合格的系统管理员来说,学习和掌握Shell编程是非常重要的,通过shell程序,可以在很大程度上简化日常的维护工作,使得管理员从简单的重复劳动中解脱出来

二、Shell是什么

1、shell起源

  • 1964年,美国AT&T公司的贝尔实验室、麻省理工学院及美国通用电气公司共同参与开始研发一套可以安装在大型主机上的多用户、多任务的操作系统,该操作系统的名称为Multics。
  • 1970年,丹尼斯•里奇和汤普逊启动了另外一个新的多用户、多任务的操作系统的项目,他们把这个项目称之为UNICS。
  • 1973年,使用C语言重写编写了Unix。通过这次编写,使得Unix得以移植到其他的小型机上面。
  • 1979年,第一个重要的标准UNIX Shell在Unix的第7版中推出,并以作者史蒂夫•伯恩(StephenBourne)的名字命名,叫做Bourne Shell,简称为sh。
  • 20世纪70年代末,C Shell作为2BSD UNIX的一部分发布,简称csh。之后又出现了许多其他的Shell程序,主要包括Tenex C Shell(tcsh)、Korn Shell(ksh)以及GNU Bourne-Again shell(bash)。

img

2、查看当前系统支持的shell

[root@server ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash

3、查看当前系统默认shell

[root@server ~]# echo $SHELL
/bin/bash

4、Shell 概念

  • Shell(外壳):是一种命令解释器程序,它能识别用户输入的各种命令,并传递给操作系统
  • 结构图:

image-20230129100929087

  • 真正能够控制计算机硬件(CPU、内存、显示器等)的只有操作系统内核(Kernel),图形界面和命令行只是架设在用户和内核之间的一座桥梁,由于安全、复杂、繁琐等原因,用户不能直接接触内核(也没有必要),需要另外再开发一个程序,让用户直接使用这个程序;该程序的作用就是接收用户的操作(点击图标、输入命令),并进行简单的处理,然后再传递给内核,这样用户就能间接地使用操作系统内核
  • 用户界面和命令行就是这个另外开发的程序,就是这层“代理”。在Linux下,这个命令行程序叫做 Shell,Shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质。
  • Shell 本身并不是内核的一部分,它只是站在内核的基础上编写的一个应用程序,它和 QQ、迅雷、Firefox 等其它软件没有什么区别。然而 Shell 也有着它的特殊性,就是开机立马启动,并呈现在用户面前;用户通过 Shell 来使用 Linux,不启动 Shell 的话,用户就没办法使用 Linux。

三、Shell 程序设计语言

1、Shell 也是一种脚本语言

  • 任何代码最终都要被“翻译”成二进制的形式才能在计算机中执行。
  • 有的编程语言,如 C/C++、Pascal、Go语言、汇编等,必须在程序运行之前将所有代码都翻译成二进制形式,也就是生成可执行文件,用户拿到的是最终生成的可执行文件,看不到源码。这个过程叫做编译(Compile),这样的编程语言叫做编译型语言,完成编译过程的软件叫做编译器(Compiler)。
  • 有的编程语言,如 Shell、JavaScript、Python、PHP等,需要一边执行一边翻译,不会生成任何可执行文件,用户必须拿到源码才能运行程序。程序运行后会即时翻译,翻译完一部分执行一部分,不用等到所有代码都翻译完。这个过程叫做解释,这样的编程语言叫做解释型语言或者脚本语言(Script),完成解释过程的软件叫做解释器。
  • 编译型语言的优点是执行速度快、对硬件要求低、保密性好,适合开发操作系统、大型应用程序、数据库等。
  • 脚本语言的优点是使用灵活、部署容易、跨平台性好,非常适合 Web 开发以及小工具的制作。
  • Shell 就是一种脚本语言,我们编写完源码后不用编译,直接运行源码即可。

2、用途

  • shell脚本的优势在于处理操作系统底层的业务 (linux系统内部的应用都是shell脚本完成)因为有大量的linux系统命令为它做支撑。2000多个命令都是shell脚本编程的有力支撑,特别是grep、awk、sed等。例如:一键软件安装、优化、监控报警脚本,常规的业务应用,shell开发更简单快速,符合运维的简单、易用、高效原则。
  • PHP、Python优势在于开发运维工具以及web界面的管理工具,web业务的开发等。处理一键软件安装、优化,报警脚本。常规业务的应用等php/python也是能够做到的。但是开发效率和复杂比用shell就差很多了。

四、如何学好shell

1、熟练掌握shell编程基础知识

  • 熟练使用vi(vim)编辑器
  • 熟练掌握Linux基本命令
  • 熟练掌握文本三剑客工具(grep、sed、awk)
  • 熟悉常用服务器部署、优化、日志及排错

2、建议

  • 掌握Shell脚本基本语法
  • 形成自己的脚本开发风格
  • 从简单做起,简单判断,简单循环
  • 多模仿,多参考资料练习,多思考
  • 学会分析问题,逐渐形成编程思维
  • 编程变量名字要规范,采用驼峰语法表示
  • 不要拿来主义,特别是新手

五、Shell脚本的基本元素

1、基本元素构成:

  • 第1行的“#!/bin/bash”
  • 注释:说明某些代码的功能
  • 可执行语句:实现程序的功能

2、Shell脚本中的注释和风格

  • 作用:通过在代码中增加注释可以提高程序的可读性
  • 传统的Shell只支持单行注释,其表示方法是一个井号“#”,从该符号开始一直到行尾都属于注释的内容,如:
#comment1
#comment2
#comment3
...

  • 多行注释:使用冒号“:”配合here document,语法如下:
:<<'xxxx'
comment1
comment2
comment3
……
xxxx

xxxx 可以是字符或数字,单引号可以不加,但以防出现莫名其妙的意外发生,比如发生字符扩展,命令替换

六、Shell脚本编写规范

1、脚本开头

  • 开头指定脚本解释器:#!/bin/sh 或 #!/bin/bash
  • 其他行#表示注释
  • 程序段开头需要加版本版权等信息,如:
# Date:创建日期
# Author:作者
# Mail:联系方式
# Function:功能
# Version:版本

  • 脚本自动增加注释版权信息
[root@server ~]# vim ~/.vimrc # 新建配置文件
autocmd BufNewFile *.py,*.cc,*.sh,*.java exec ":call SetTitle()"
 
func SetTitle()
    if expand("%:e") == 'sh'
        call setline(1,"#!/bin/bash")
        call setline(2,"##############################################################")
        call setline(3, "# File Name: ".expand("%"))
        call setline(4, "# Version: V1.0")
        call setline(5, "# Author: Andy\_Sun")
        call setline(6, "# Email: Andy\_Sun@163.com")
        call setline(7, "# Organization: http://www.cnblogs.com/Andy\_Sun/")
        call setline(8, "# Created Time : ".strftime("%F %T"))
        call setline(9, "# Description:")
        call setline(10,"##############################################################")
        call setline(11, "")
    endif
endfunc

在这里插入图片描述

  • 例:创建一个标准的脚本,实现有注释信息,版权信息,内容任意,并执行
[root@server ~]# vim cmatrix.sh
wget http://archive.ubuntu.com/ubuntu/pool/universe/c/cmatrix/cmatrix_1.2a.orig.tar.gz
tar xvf cmatrix_1.2a.orig.tar.gz
cd cmatrix-1.2a
yum install -y  ncurses-devel
yum install -y  gcc
./configure && make && make install
echo "Program installation complete !"
echo "Program installation complete !"
echo "Program installation complete !"
[root@server ~]# bash cmatrix.sh 
[root@server ~]# cmatrix

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

2、脚本中尽量不用中文注释

  • 别吝啬添加注释,必要的注释方便自己别人理解脚本逻辑和功能
  • 尽量用英文注释,防止本机或切换系统环境后中文乱码的困扰
  • 单行注释,可以放在代码行的尾部或代码行的上部
  • 多行注释,用于注解复杂的功能说明,可以放在程序体中,也可以放在代码块的开始部分 代码修改时,对修改的内容

3、多使用内部命令

  • 无论碰到哪种情况,请尽量考虑使用内部命令而不是外部命令
  • 内部命令执行的效率高,性能好

4、没有必要使用cat命令

  • 这是我们经常在论坛里讨论的话题之一。没有必要使用cat命令指的是在有些时候,我们会发现根本没有必要使用cat命令。使用了多余的cat命令会让你的代码看起来很丑陋,而且还会带来性能上的问题
  • 例如:以下两条命令的结果一样
[root@server ~]# cat /etc/passwd | grep root
[root@server ~]# grep root /etc/passwd 

5、仔细阅读出错信息

  • 程序员常犯的一个错误是:当我们敲入的命令报错后,我们中的大多数人只是对错误信息一瞥而过,而不会去认真的读一读,很多时候,错误信息里就包含了解决办法
  • 有时候我们修改了某个错误并再次运行后,系统依旧会报错。然后我们再次修改,但系统再次报错。这可能会持续很长时间。但实际上,旧的错误可能已经被纠正,只是由于出现了其它一些新错误才导致系统再次报错。而我们依旧在怀疑为什么修改好的代码依然不能正常运行。
  • 因此,请你养成仔细阅读错误信息的习惯。

6、文件名以sh结尾

  • shell脚本文件名应见名知义 ,扩展名位sh,如:backup_mysql.sh

7、代码缩进

  • shell没有强制要求,但建议缩进,这样可以提高阅读性,程序更有层次感,
  • 例:编写九九乘法表
[root@server ~]# vim 99.sh

#!/bin/bash

for((i=1;i<10;i++))
do
        echo  -ne  "$i\t"
done
echo
for((i=1;i<70;i++))
do
        echo  -n  "="
done
echo
for((i=1;i<10;i++))
do
        for((j=1;j<=i;j++))
        do
                echo  -en  "$i\*$j=$[i\*j]\t"
        done
        echo
done
[root@server ~]# bash 99.sh 
1	2	3	4	5	6	7	8	9	
=====================================================================
1*1=1	
2*1=2	2*2=4	
3*1=3	3*2=6	3*3=9	
4*1=4	4*2=8	4*3=12	4*4=16	
5*1=5	5*2=10	5*3=15	5*4=20	5*5=25	
6*1=6	6*2=12	6*3=18	6*4=24	6*5=30	6*6=36	
7*1=7	7*2=14	7*3=21	7*4=28	7*5=35	7*6=42	7*7=49	
8*1=8	8*2=16	8*3=24	8*4=32	8*5=40	8*6=48	8*7=56	8*8=64	
9*1=9	9*2=18	9*3=27	9*4=36	9*5=45	9*6=54	9*7=63	9*8=72	9*9=81	

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

七、shell脚本执行

1、方法1

  • 使用sh或bash命令执行脚本,不需要执行权限(建议使用),脚本中可以不指定解释器
[root@server ~]# vim test.sh
#!/bin/bash
echo  "china"

[root@server ~]# bash test.sh
china
[root@server ~]# sh test.sh
china

  • 可以使用bash -n 脚本名 ,进行语法检测,且不执行脚本
  • 可以使用bash -x 脚本名 ,进行脚本执行跟踪,逐条语句的跟踪执行

2、方法2

  • 切换到脚本所在目录使用./执行脚本,需要执行权限
[root@server ~]# ./test.sh
-bash: ./test.sh: 权限不够
[root@server ~]# chmod +x test.sh
[root@server ~]# ./test.sh

3、方法3

  • 绝对路径执行脚本,需要执行权限
[root@server ~]# vim /t1.sh
#!/bin/bash
echo  "china"

[root@server ~]# /t1.sh
-bash: /t1.sh: 权限不够

[root@server ~]# chmod +x /t1.sh
[root@server ~]# /t1.sh
china

![](https://img-blog.csdnimg.cn/img_convert/9a8cb5f8c0ec69e6499adead0da6e95b.png)



最全的Linux教程,Linux从入门到精通

======================

1.  **linux从入门到精通(第2版)**

2.  **Linux系统移植**

3.  **Linux驱动开发入门与实战**

4.  **LINUX 系统移植 第2版**

5.  **Linux开源网络全栈详解 从DPDK到OpenFlow**



![华为18级工程师呕心沥血撰写3000页Linux学习笔记教程](https://img-blog.csdnimg.cn/img_convert/59742364bb1338737fe2d315a9e2ec54.png)



第一份《Linux从入门到精通》466页

====================

内容简介

====

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。



![华为18级工程师呕心沥血撰写3000页Linux学习笔记教程](https://img-blog.csdnimg.cn/img_convert/9d4aefb6a92edea27b825e59aa1f2c54.png)



**本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。**

> 需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注运维)**
![img](https://img-blog.csdnimg.cn/img_convert/b2fe08ee48e9ac7eed1e7a931521b9f2.jpeg)

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
u安装镜像文件,供读者免费下载。



![华为18级工程师呕心沥血撰写3000页Linux学习笔记教程](https://img-blog.csdnimg.cn/img_convert/9d4aefb6a92edea27b825e59aa1f2c54.png)



**本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。**

> 需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注运维)**
[外链图片转存中...(img-iPLfxFec-1713399993111)]

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值