Shell 编程 - 学习/实践
1.介绍
Linux中非常有用的功能, 这个功能叫做shell编程, 不要听到编程就被吓到, 并没有那么难, shell脚本编程的基本元素就是我们使用的Linux命令, 把这些Linux命令组合在一起,就可以构成shell脚本. |
2.应用背景
主要应用于Linux服务器上处理一些任务,如:批量操作,重复性任务,定时任务,自动化【对于大多数的应用场景都是用来实现运维的自动化】 包括但不限于以下方面: 测试工具和内容自动化 |
3.学习
【章节】 01 | 什么是shell 02 | Linux的启动过程 03 | shell脚本的格式 04 | 脚本不同执行方式的影响 05 | 管道 06 | 重定向 07 | 变量赋值 08 | 变量引用即作为范围 09 | 环境变量、预定义变量与位置变量 10 | 环境变量与配置文件 【01 | 什么是shell】 学习大纲 -- 什么是shell -- Linux的启动过程 -- 怎样编写一个shell脚本 -- shell脚本的执行方式 -- 内建命令和外建命令的区别 shell脚本除了我们去编写, 系统本身也有很多shell脚本, 在系统启动的过程中就已经涉及到大量的shell脚本运行, 这里结合Linux的启动过程叙述一下. 如果我们想实现自己的任务, 就需要我们自己去编写shell脚本, 至于编写shell脚本需要哪些部分, 接来下会介绍, 以及编写的脚本如何执行, 内建命令和外建命令的区别. 1.1 什么是shell shell是命令解释器, 用于解释用户对操作系统的操作 shell会把用户所执行的命令翻译给我们的内核, 内核根据我们命令执行的结果返回给用户. 例如,我们使用shell去解释的ls命令, 底层过程是什么样的呢? // ls 显示目录和文件列表 当我们输入ls回车时, shell接收到ls命令, 之后ta对命令的选项和参数进行分析, 分析后, 我们知道ls是查看文件目录列表的, 第一步ta会交给我们的文件系统[在内核], 内核接收到命令, 根据文件系统把我们要查看的文件目录再翻译成对应的硬盘的某一个扇区, [SSD, 固态硬盘是另外一中结构], 翻译到硬件, 硬件会把我们查询的结果返回给内核, 内核返回给shell, shell再返回给用户. ls底层过程: 用户输入命令--->shell[分析]---->文件系统[内核]----->硬件[硬盘] 用户<---shell<----文件系统[内核]<-----硬件[硬盘] 我们发现只要我们shell编写好, 用户是不用写驱动程序的, 也不用开发复杂的c语言, 通过一个简单的命令就可以控制操作系统, 以及控制内核去做很多我们自己想做的事情.这就是shell解释器最主要的功劳, 用户不用去了解底层的这些知识 1.2 shell 有很多 cat /etc/shells //查看shell分类 有bsh csh, tcsh, zsh //zsh有时是默认没有被安装的, 主要看安装方式 还有一种是bash, 也就是我们最常使用的, 这里的bash中a 是 again的缩写, 就是重写的意思, 即基于bsh, 把其他shell好用功能集成进来, 把bsh比较少用的功能给去掉,又重新写了一遍. bash是centOS 7和Ubuntu默认shell. 所以我们也是常常用bash去做命令解释器. 【02 | Linux的启动过程】 我们来下系统自带的shell脚本都在哪里, 系统自带shell有两大用处, 第一大用处就是Linux系统启动过程, 启动过程中需要功能是可以通过shell来实现的, 第二大用处是Linux的很多命令也是shell脚本编写出来的. Linux启动过程简单分为六个步骤: BLOS --MBR---BootLoader(grub)---kernel--systemd--系统初始化--shell 详细介绍 BLOS引导, 视为基本的输入输出系统,在主板上面, 通过blos去选择我们所要引导的介质, 引导的介质一般会有两种, 硬盘和光盘, 早期安装操作系统使用的是光盘, 现在安装操作系统, 更多使用的是网络去引导, 在正常启动过程中,经过blos就来到了我们的硬盘, 那这个硬盘是不是可引导的呢, 要看硬盘的主引导记录部分,这个部分叫做MBR, 如果硬盘是可引导的, 接下来就该进入Linux中这个过程, 这个过程我第一个引导的不是内核, 而是叫做grub[grub 2.0, 一般称为BootLoader]的软件,BootLoader, 主要是启动和引导内核的工具, 通过这个工具我们可以引导Linux内核, 甚至我们可以通过BootLoader可以去引导Windows启动, 如果只是Linux, 我们可以把ta简单地认为是选择哪个内核以及选择指定内核版本的, 确定了内核版本之后, 内核就开始启动了, 内核启动后, 会把系统做一个初始化, 以及通过驱动程序去加载各种各样的硬件, 再之后, 就是shell脚本可以工作了, 如果centOS 7, 第一个程序就是systemd, 一号进程, 如果是centOS 6 就是init 一号进程, 无论是systemd还是init,都被称作是一号进程, 如果是centOS 6 , 从init之后, 所有的引导的过程全都是shell脚本来完成的, 包括怎么去加载内核需要的模块, 包括怎样去启动网络, 这个功能都是由init然后后续跟着很多shell脚本完成的, 而在systemd中,有一部分是已经改为systemd的配置文件方式, 即使用应用程序去引导, 应用程序引导之后, 系统初始化过程仍然是Linux shell脚本. 接下来看下, 这些文件都在哪里 tmp: 执行shell 的四种方式TBD |
4.推荐书籍
《Linux命令行与shell脚本编辑大全》 《鸟哥的Linux私房菜》 |
5.学习体会
TBD |
6.参考
极客时间专栏:初识shell编程--尹会生 以及不记名网友的评论见解 https://blog.csdn.net/william_n/article/details/102892526 //shell脚本编写思路 |
后续补充
...
Shell 编程 - 学习/实践相关推荐
- 《Linux Shell编程学习笔记之一》
<Linux Shell编程学习笔记之一> 前言 由于自己一直在Windows上面编程,用linux用的比较少,学习linux还是本科大二学的一点点知识.因此自己就准备花点时间来熟悉下li ...
- SHELL编程学习笔记
SHELL编程学习笔记 本文描述unix shell的各种应用实例,根据查阅资料和自我总结,作为自己今后复习的模板.本文搜集整理常用的shell应用实例,以例子详述unixshell部分命令的使用,着 ...
- Linux shell编程学习
Linux shell编程学习 shell是一个作为用户与Linux系统间接口的程序,它允许用户向操作系统输入需要执行的命令.这点与Windows的命令提示符类似,但Linux shell的功能更加强 ...
- linux shell编程学习——数组使用
linux的shell的编程方面很强大,最近在写脚本的时候,需要用到shell的数组.下面对最近的学习和使用做个简单的总结. 定义 linux的数组分两种,一种是普通的下标数组,一种是关联数组.前者和 ...
- Linux Shell 编程学习笔记(1)
Linux Shell编程学习笔(2015-7-11) 一:Shell程序运行的三种方法 赋予程序文件可执行权限,直接运行 比如:chmod a+x shell.sh 使用命令解释器(即shell ...
- Linux Shell编程学习笔记(4)
Linux Shell编程学习笔记(2015-7-20) 分类:linux shell 今天学习了Linux Shell中的控制结构.其实大多数语言的控制结构这一块都是基本类似的,有了C语言的基础 ...
- Linux Shell编程学习笔记(2)
Linux Shell编程学习笔记(2015-7-12) 分类:linux shell Shell变量 一:关于Shell变量 Shell是一种弱类型的语言,变量存储的一切值都是字符串.Shell ...
- Linux Shell编程学习笔记(3)
Linux Shell编程学习笔记(2015-7-19) 分类:linux shell 一:位置参数和特殊变量 什么是位置参数? 位置参数也叫位置变量,是运行shell脚本程序时,命令行she ...
- (1)Shell 编程学习 Shell是什么?Shell的浅显原理 为什么要学Shell 及其第一个Shell脚本 CTF角度学习Shell
最近刷CTF题目的时候经常要用到Shell语言,但是自己并没有系统的学习,所以最近花了点时间学习一下,所以重新来梳理一下.对于稍微有一点编程语言基础的同学,能上手Shell其实不需要半小时(甚至更短) ...
最新文章
- 遍历 HashMap 的 5 种最佳方式,我不信你全知道!
- OpenCV-信用卡数字识别-03
- 需求分析 应该先写业务还是功能_产品经理必知:产品调研中功能调研的标准“姿势”...
- thymealf如何实现传单个变量给html_梦回2013,看尤大vue的第一行代码,如何用30行代码实现vue(超简洁,适合初学者)...
- python飞机大战实训报告200_飞机大战实训报告.doc
- 局部敏感哈希(LSH)
- 电子商务数据挖掘python案例_精心整理!9个 Python 实用案例分享!
- 怎么更好掌握Web前端技术?JS的跨域是怎么回事?
- sklearn学习4.数据处理与特征工程
- 一文看尽科大讯飞年度发布会:医疗,是这家A股AI公司的新赛道
- php简历程序模板,PHP程序员工作简历模板下载word格式
- latex中标题的使用
- ASP.NET性能调优
- 关于Go语言的底层,你想知道的都在这里!
- 学习笔记8--惯性导航定位技术
- I.MX RT1176笔记(6)-- M4核调试参数异常问题
- monkey--介绍
- 网络爬虫学习第一弹:urllib库使用
- iOS 切换到后台任务执行
- DCP打包中生成KDM所需要的CA证书