2024年最新RHCE——十三、Shell自动化运维编程基础,写给互联网大厂员工的真心话

本文提供了一套全面的Linux教程,包括《Linux从入门到精通》第2版、系统移植、驱动开发等内容,强调了系统化的学习方法和避免浅尝辄止的重要性,鼓励读者加入技术交流圈子共同成长。
摘要由CSDN通过智能技术生成

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

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

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

  2. Linux系统移植

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

  4. LINUX 系统移植 第2版

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

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

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

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

内容简介

====

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

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

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

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

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

需要这份系统化的资料的朋友,可以点击这里获取!

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

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

4、方法4

  • 使用点(.)或者source 执行脚本,不需要执行权限
[root@server ~]# source /t1.sh
china
[root@server ~]# . test.sh
china

注意:

  • 法1、2、3都是启动一个子shell,在子shell中执行此脚本,脚本中设置的变量在脚本执行完毕后不会保存
  • 法4 都是在当前shell进程中执行此脚本,而不是重新启动一个shell 在子shell进程中执行此脚本,并且脚本中设置的变量在脚本执行完毕后会保存下来。

八、bash shell基本功能

1、echo打印命令

  • 格式:echo -参数 内容
  • 参数
    • -n :取消输出后行末的换行符号
    • -e :启用转义字符
  • 可以输出带颜色的字体:
    • 格式:echo -e “\e[字体控制;字体颜色或背景色 字符串内容 \e[0m”
    • \e[表示控制开始,\e[0m表示控制结束
    • 字体控制选项:1表示高亮,4表示下划线,5颜色闪烁
    • 颜色如下:字颜色:30-37 , 背景色:40-47
[root@server ~]# vim color.sh
echo -e "\e[30m 黑色字\e[0m"
echo -e "\e[1;31m 紅色字\e[0m"
echo -e "\e[32m 綠色字\e[0m"
echo -e "\e[33m 黃色字\e[0m"
echo -e "\e[34m 藍色字\e[0m"
echo -e "\e[35m 紫色字\e[0m"
echo -e "\e[36m 天藍字\e[0m"
echo -e "\e[37m 白色字\e[0m"
echo -e "\e[40;37m 黑底白字\e[0m"
echo -e "\e[41;37m 紅底白字\e[0m"
echo -e "\e[42;37m 綠底白字\e[0m"
echo -e "\e[43;37m 黃底白字\e[0m"
echo -e "\e[44;37m 藍底白字\e[0m"
echo -e "\e[45;37m 紫底白字\e[0m"
echo -e "\e[46;37m 天藍底白字\e[0m"
echo -e "\e[47;30m 白底黑字\e[0m"

[root@server ~]# bash color.sh 

在这里插入图片描述

2、printf 命令

  • printf 命令模仿 C 程序库(library)里的 printf() 程序, 由 POSIX 标准所定义,因此使用 printf 的脚本比使用 echo 移植性好,printf 使用引用文本或空格分隔的参数,外面可以在 printf 中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。默认 printf 不会像 echo 自动添加换行符,我们可以手动添加 \n
  • 格式:
printf   格式控制字符串   参数列表

  • 例:
[root@server ~]# echo "Hello, Shell"
[root@server ~]# printf "Hello, Shell\n"
[root@server ~]# printf "%d %s\n" 1 "abc"
[root@server ~]# printf '%d %s\n' 1 "abc" # 单引号双引号效果一样
[root@server ~]# printf %s abcdef # 没有双引号也可输出,没有\n会续连下一个提示符
[root@server ~]# printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg

# %s %c %d %f 都是格式替代符,%s 输出一个字符串,%d 整型输出,%c 输出一个字符,%f 输出实数,以小数形式输出。
# %-10s 指一个宽度为 10 个字符(- 表示左对齐,没有则表示右对齐),任何字符都会被显示在 10 个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。

[root@server ~]# printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
# %-4.2f 指格式化为小数,其中 .2 指保留2位小数

3、history历史命令

  • 格式:
history [参数] [历史命令保存文件]

  • 参数

    • -c :清空历史命令记录
    • -w:把缓存中的历史命令写入历史命令保存文件。如果不手工指定历史命令保存文件,则放入默认历史命令保存文件~/.bash_history 中
  • 修改默认记录历史命令条数:

[root@server ~]# vim /etc/profile
HISTSIZE=1000

  • 面试题:显示history历史命令出现次数最高的top10
[root@server /]# history | tr -s " " | cut -d " " -f3 | sort | uniq -c | sort -nr | head -10

# 浏览历史命令 | 压缩为1个空格 | 截取以空格为间隔的第3列 | 排序 | 统计并去重 | 以次数为依据进行降序排序 | 取前10个

  • 面试题:增加history显示的信息,如:历史命令的执行时间
[root@server /]# vim ~/.bashrc # 编辑bash的配置文件,最后一行后添加:
export  HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S: "

[root@server /]# source ~/.bashrc # 刷新配置
[root@server /]# history # 查看结果

修改之后文件:
在这里插入图片描述

4、命令与文件名补全:tab

5、命令别名

  • 格式:alias 别名=原命令
  • 例:
[root@server ~]# alias hi=history
[root@server ~]# hi

  • 注意:别名的优先级比命令高,命令执行时的顺序如下:
第一顺位:执行用绝对路径或相对路径执行的命令。
第二顺位:执行别名。
第三顺位:执行 Bash 的内部命令。
第四顺位:执行按照 $PATH 环境变量定义的目录查找顺序找到的第一个命令。

  • 为了让这个别名永久生效,可以把别名写入环境变量配置文件“~/.bashrc”。
[root@server ~]# cat ~/.bashrc # 在最下面增加

6、命令执行顺序

  • 顺序执行: ;
[root@server ~]# date ; ls -l /etc/passwd

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

需要这份系统化的资料的朋友,可以点击这里获取!

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

  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值