编程基础与脚本规范
- 一.编程基础
- 1.1程序组成
- 1.2.编程风格
- 1.3 编程语言的分类
- 二.shell脚本基础
- 2.1shell脚本的用途和应用场景
- 2.2常见的shell解释器
- 2.3shell脚本基本结构
- 2.4shell规范脚本
- 2.5脚本的执行方式
- 2.6脚本错误调试
- 三.重定向与管道符
- 3.1标准输入去输出
- 3.2重定向
- 3.3 管道符
一.编程基础
1.1程序组成
程序:算法+数据结构
- 数据:是程序的核心
- 算法:处理数据的方式
- 数据结构:数据在计算机中的类型和组织方式
1.2.编程风格
1.过程式:以指令为中心来组织代码,数据服务于指令。代表:c语言,bash。
过程式编程语言三种执行逻辑:
- 顺序执行:程序按从上到下顺序执行
- 选择执行:程序执行过程中,根据条件不同,进行选择不同分支继续执行
- 循环执行:程序执行过程中需要重复执行多次某段语句
2.对象式:以数据为中心来组织代码,指令服务于数据,代表:java,c++,Python- 类:实例化对象,method
1.3 编程语言的分类
根据运行方式
- 编译运行:源代码—编译器----程序文件
- 解释运行:源代码----运行时启动解释器,由解释器边解释边运行
根据启动编译过程中功能的实现是调用库还是调用外部的程序文件
- shell脚本编程:利用系统上的命令及编程组件进行编程
- 完整编程:利用库或编译程组件进行编译
二.shell脚本基础
2.1shell脚本的用途和应用场景
用途:
- 自动化常用命令
- 执行系统管理和排除故障
- 创建简单的应用程序
- 处理文本或文件
2.2应用场景: - 重复性操作
- 交互性任务
- 批量事务处理
- 服务运行状态监控
- 定时任务执行
2.2常见的shell解释器
- Linux系统中shell是一种特殊的应用程序,它介于操作系统内核和用户之间,充当一个“命令解释器”的角色,负责接收用户输入的操作指令并进行解释,将需要执行的操作传递给内核执行,并输出结果。是用户使用linux的桥梁
- shell即是一种命令语言,又是一种程序设计语言
- 常见的shell解释器程序有很多种,使用不同的shell时,其内部指令,命令行提示符等方面会存在一些区别,通过/etc/shell 文件可以了解当前系统所支持的shell脚本种类
查看本机shell信息:
linux 中常见的shell
- bash:基于GUN的框架下发展的shell
- csh:类似c语言的shell
- tcsh:整合了csh提供了更多功能
- sh:已经被bash替换
- nologin:让用户无法登录
bash(bin/bash)是目前大多数linux版本采用的默认shell
bash特性
1.支持快捷键:比如ctrl+c强制终止进程,ctrl+l清屏,tab补齐 ,等等。
2.支持产看历史命令
3.支持别名
4.标准输入和标准输出的重定向
5.管道符
6.文件名通配机制
7.支持命令hash
8.支持变量
这些功能都是bash特有的,其他shell环境没有这些功能,或者说没有这么全,所以bash取代sh成为了linux的默认shell
2.3shell脚本基本结构
shell脚本就是将各类命令预先放入到一个文件中,方便一次性执行行的一个程序文件,主要是方便管理员进行设置或者管理的
什么是shell脚本:
- 将要执行的命令按顺序一一列出,保存到一个文本文件,最后自动执行
- 执行脚本需要x权限,也可以使用绝对路径来执行文件
- 可结合各种shell控制语句完成更复杂的操作
脚本的构成:
1.脚步申明(申明解释器):第一行开头“#!/bin/bah”,表示此行以下的代码语句是通过/bing/bash程序来执行。还有其他类型的解释器,比如#/usr/bin/python,#! /usr/bin/expect
2.注释信息:以#开头的语句表示为注释信息,被注释的语句在脚本运行时不会被执行
3.可执行语句:如echo命令,用于输出“”之间的字符串
2.4shell规范脚本
脚本名称规范:文件名以.sh结尾,方便识别
脚本代码开头约定:
1.第一行一般为调用使用的语言
2.程序名,避免更改文件名后无法找到正确的文件
3.版本号
4.更改后的时间
5.作者的相关信息
6.该程序的作用,及注意事项
7.最后是各版本的更新时间
2.5脚本的执行方式
1.指定路径去找执行文件,文件需要有执行权限
- 绝对路径。如:/root/hello.sh
- 相对路径。如:./hello.sh
2.指定解释器去执行(bash脚本名),不需要执行权限 - bash脚本名。如:bash hello.sh
- “source脚本名”h或‘“.脚本名”。 //不会启动子shell环境
注意;
1.执行脚本时的shell环境:
- source和.执行脚本时,会在当前shell环境中执行脚本
- bash,绝对路径,相对路径,执行脚本时,会创建一个子shell环境,并在这个子shell环境中执行脚本
2.不建议使用source来执行脚本,可能会影响一些资源配置
3.脚本中的空白行会被解释器忽略
4.脚本中,除了shebang,余下所有以#号开头的行,都会被视作注释行而被忽略,即为注释行
2.6脚本错误调试
脚本错误类型:
1.命令错误:命令错误不会影响接下来的命令,之后的命令会继续执行
2.语法错误:会导致后续的命令不执行。造成脚本中一部分命令已执行,一部分未执行
3.逻辑错误:执行后的效果不是自己想要的。需要自己去排查
bash -n 脚本名称 //只检查语法错误,不真正执行脚本,定位的错误行可能不准确
bash -x 脚本名称 //显示每个命令的执行过程,方便发现逻辑板错误
三.重定向与管道符
由于shell脚步“批量处理”的特殊性,其大部分操作过程位于后台,不需要用户进行干预,因此要学会提取,过滤执行信息变得十分重要,所以我们需要重定向和管道
3.1标准输入去输出
当执行shell命令时,会默认打开3个文件夹,每个文件夹有对应的文件描述符来方便我们使用
类型 | 设备文件 | 文件描述 | 默认情况 | 对应文件位置 |
---|---|---|---|---|
标准输入 | /dev/stdin | 0 | 从键盘获得输入 | proc/self/fd/0 |
标准输出 | /dev/stdout | 1 | 输出到屏幕 | proc/self/fd/1 |
错误输出 | /dev/stderr | 2 | 输出到屏幕 | /proc/self/fd/2 |
交互式硬件设备:
- 标准输入:从该设备接收用户输入数据
- 标准输出:通过该设备想用户输出的数据
- 标准错误:通过该设备报告执行出错误信息
3.2重定向
1.重定向的意思就是,不通过标准输出到默认屏幕上,而是输出到你指定的位置
输出重定向
符号 | 作用 |
---|---|
命令>文件 | 将标准输出结果保存到指定文件中 |
命令>>文件 | 将标准输出结果追加到指定文件尾部 |
命令2>文件 | 将错误输出信息保存到指定文件中 |
命令2>>文件 | 将错误输出信息追加到指定文件尾部 |
命令 >文件 2>&1 | 混合输出,将标准输出与错误输出保存到同一个文件中 |
注: |
- &表示混合,&>和>&都表示将标准输出和标准错误输出重定向到同一个文件
- 命令>文件2>&1 ,表示把错误输出2重定向给前面的标准输出1,即将错误输出和标准输出保存到同一个文件中
- 将‘aaa’重定向输出到fa.txt文件中,之后将‘bbb’输出到fa.txt文件中,覆盖原有的‘aaa’,最后将‘ccc’追加到fa.txt文件中
3.使用分界符进行输入重定向
4.混合输出,将标准输出和错误输出同时重定向到文件中
3.3 管道符
管道符作用是连接两个命令,将第一个命令的标准输出作为第二个命令的标准输入。同一行命令中可以使用多个管道符
Linux下的管道符使用| 表示