目录
程序编程风格
面向过程语言 开发的时候 需要 一步一步 执行
-
做一件事情,排出个步骤,第一步干什么,第二步干什么,如果出现情况A,做什么处理,如果出现了情况B,做什么处理
-
问题规模小,可以步骤化,按部就班处理
-
以指令为中心,数据服务于指令
-
C,shell
面向对象语言 开发的 时候 将 任务 当成一个整体
-
将编程看成是一个事物,对外界来说,事物是直接使用的,不用关心事物内部的情况。而编程就是设置事物能够完成功能。
-
一种认识世界、分析世界的方法论。将万事万物抽象为各种对象
-
类是抽象的概念,是万事万物的抽象,是一类事物的共同特征的集合
-
对象是类的具象,是一个实体
-
问题规模大,复杂系统
-
以数据为中心,指令服务于数据
-
java,python,golang等 云 go k8个字母s 平台
1.shell脚本 什么是she11?
She11是一个命令解释器,它在操作系统的最外层,负责直接与用户进行对话,把用户的输入解释给操作系统,并处理各和各样的操作系统的输出结果,输出到屏幕反馈给用户。这种对话方式可是交互也可以是非交互式的,我们所输入的命令计算机是不识别的,这时就需要一种程序来帮助我们进行翻译,变成计算机能识别的二进制程序,同时又把计算机生成的结果返回给我们。
就是 将人类使用的高级语言翻译成二进制,也可以将二进制翻译成高级语言
1.1shell的作用
shell 的作用 :linux系统中的shell是一个特殊的应用程序,他介于操作系统内核与用户之间,充当一个“命令解释器”的角色,负责接受用户输入的操作命令并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。
linux中常见的shell
-
bash:基于gun的框架下发展的shell
-
csh:类似c语言的shell
-
tcsh:整合了csh提供了更多功能
-
sh:已经被bash替换
-
nologin:让用户无法登录
bash (/bin/bash)是目前大多数Linux 版本采用的默认shell
shell脚本用途
-
将简单的命令组合完成复杂的工作,自动化执行命令,提高工作效率
-
减少手工命令的重复输入,一定程度上避免人为错误
-
将软件或应用的安装及配置实现标准化
-
用于实现日常性的,重复性的运维工作,如:文件打包压缩备份,监控系统运行状态并实现告警等
1.2 什么是shell脚本?及构成
脚本的构成
1、脚本申明(解释器):第一行开头“#!/bin/bash”,表示此行以下的代码语句是通过/bin/bash程序来解释执行。#!/bin/bash为默认的解释器还有其他类型的解释器,#!/bin/python #!/bin/expect
2、注释信息:以#开头的语句表示为注释信息 # 注 释
3、可执行语句:比如echo命令用于输出“ ”之间的字符串
编写脚本如果以.sh结尾 脚本内容会高亮
1.3 脚本执行逻辑及执行方式
执行脚本
- dadw直接调用shell解释器 加上脚本的名字 bash脚本名 不需要加上权限
- 路径/脚本 (绝对相对 ) 但是这个需要权限
- source (.)加脚本 名字不建议使用 不需要权限 source会直接修改当前bash环境内容,会有一些问题
为什么命令可以补全?
1.有运行权限 2.在$PATH路径下面
脚本执行逻辑
- 顺序执行 程序按从上到下顺序执行
- 选择执行 程序执行过程中,根据条件的不同,进行选择不同分支继续执行
- 逻辑执行 程序执行过程中需要重复执行多次某段语句
脚本错误
- 命令错误 不会影响接下来的命令执行,但是本条命令不执行
- 语法错误 直接影响脚本无法正常运行
- 逻辑错误 只能自己去筛查
bash -n 脚本名称 脚本 检查语法错误
bash -x 脚本名称 模拟执行脚本 告诉你脚本哪边有问题
了解 加一些脚本的安全选项
set -e 一旦错误立即停止
set -u 变量不存在 不执行
总结 脚本错误常见的三种区别
1.语法错误,会导致后续的命令不继续执行,可以用bash -n检查错误,提示的出错行数不一定是准确的
2.命令错误,默认后续的命令还会继续执行,用bash -n无法检查出来,可以使用bash -x进行观察
3.逻辑错误,只能使用bash -x进行
2.重定向和管道操作
2.1 重定向
类型 | 设备文件 | 文件描述编号 | 默认设备 |
---|---|---|---|
标准输入 | /dev/stdin | 0 | 键盘 |
标准输出 | /dev/stdout | 1 | 显示器 |
标准错误输出 | /dev/stderr | 2 | 显示器 |
交互式硬件设备
-
标准输入:从该设备接收用户输入的数据
-
标准输出:通过该设备向用户输出数据
-
标准错误:通过该设备报告执行出错信息
重定向的意思就是 ,不输出到默认设备上,输出到你指定的位置
类型 | 操作符 | 用途 |
---|---|---|
重定向输入 | < | 从指定的文件读取数据,而不是从键盘输入 |
重定向输出 | 1> | 将输出结果保存到指定的文件(覆盖原有内容) |
>> | 将输出结果追加到指定的文件尾部 | |
标准错误输出 | 2> | 将错误信息保存到指定的文件(覆盖原有内容) |
2>> | 标准错误输出结果追加到指定的文件尾部 | |
混合输出 | &>无论对错都可以重定向 | 将标准输出、标准错误的内容保存到同一个文件中 |
重定向 改变电脑数据的输出方向
默认电脑数据的输出方向是屏幕(你发送一条指令给电脑 电脑会回复结果给你 结果一定显示在屏幕上)
我们称为 标准输入
如果电脑没有正确回复
我们称为 错误传输
我们通过 键盘 鼠标 扫描仪 话筒等设备输入给电脑的指令
我们称为 标准输入
在linux中一切皆是文件(ll /dev/std*)
改变输出方向 1、可以输出别的终端设备 2、输出到文件里
>覆盖 >>追加
2.2管道符
|将第一个命令的结果 当做后一个命令的处理对象 (有标准输出 大概率可以使用|)
xargs命令 代表标准输出 ls|xargs touch
3.shell 变量的作用以及类型
3.1常见shell变量的类型包括:
1.自定义变量:由用户自己定义,修改和使用
2.环境变量:由系统维护,用于设置工作环境 当前目录 当前主机 $ PATH
3.只读变量:只可以读取不可以更改 只能读不能修改 常量
4.位置变量:通过命令行给脚本传递参数
5.预定义变量:Bash中内置的一类变量 不能修改 规定好的变量 放在那里让你使用
特殊符号
${ }定义的变量名的范围
“”变量在双引号中可以识别 弱引用
‘ ’ 变量在单引号中不被识别 强引用
`` 反撇号 代表引用命令执行的结果 效果等于 $( )
(脚本中只要是变量 就{ }起来 一定不会出错)
3.2 命名要求
区分大小写
不能使程序中的保留字和内置变量:如:if, for,hostname 命令 a=
只能使用数字、字母及下划线,且不能以数字开头,注意:不支持短横线 “ - ”,和主机名相反
不要使用内置的变量,使用英文尽量使用词义通俗易懂,PATH
大驼峰 StudentFirstName
小驼峰 studentFirstName
下划线 student_name
预定义
$? 代表上一次命令执行结果是否正确 0代表正确 非0代表不正确
$0 代表脚本的文件名字
$$ 当前bash的 pid
$# 代表位置参数的总个数
$* 代表返回所有参数 所有参数当成一个整体返回
$@ 代表返回所有参数 每一个参数都是独立的个体返回
3.3.整数变量的运算
(shell默认只支持整数的运算)
格式:expr 变量1 运算符 变量2 [运算符 变量3]
运算符:+ 加法、-减法、\*乘法、/除法、%取余
常见的运算表达式:(result代表自定义变量,可用任意代替)
result=$(expr 变量1 运算符 变量2)
result=$((变量1 运算符 变量2))
result=$[变量1 运算符 变量2]
let result=变量1 运算符 变量2
i++ 相当于 i=$[$i + 1] i++是先赋值再运算
i-- 相当于 i=$[$i - 1]
i+=1相当于i=$[$i + 1]