程序的组成:

程序:算法+数据结构

数据:程序处理的目标

数据结构:相互之间存在一种或多种特定关系的数据元素的集合

算法:处理数据的方式

编程风格:

  • 面向对象:把所有的操作都转化为对象的方式。
  • 面向过程:步骤话解决问题

编程语言:

计算机:运行二进制指令

编程语言:人与计算机之间交互的语言

编程语言分类:

低级语言

机器语言:二进制0和1组成的序列,称为机器指令

汇编语言:用一些符号代替机器语言

高级语言

机器代码文件:0和1组合而成的二进制文件。

编译:编写的程序文件-->编译器(一个工具)-->机器代码文件-->执行文件

(编译:通过编译器转换成二进制可执行文件)

特点:所有代码统一进行编译,执行效率高

解释:编写的程序文件-->执行-->解释器-->机器代码

(解释:将文件中的一行行代码按顺序依次交给解释器,解释为二进制指令再进行执行)

特点:一行行代码依次进行解释和执行。需要把源码交给使用者

编程逻辑处理方式:

顺序、分支、循环

shell脚本

shell:面向过程、解释型语言(需要通过指定shell来将程序解释为计算机可以理解的语言)

shell脚本:符合一定格式的文本文件

特点:批量执行任务、减少误操作、提高效率

格式要求:

首行shebang(#!)机制

#!:翻译为shebang

shell脚本的创建:

  1. 创建文本文件
  2. 首行申明shell使用的解释器: #!
  3. 编写shell脚本相关内容
  4. 添加执行权限
#!SHEBANG
CONFIGURATION_VARIABLES
FUNCTION_DEFINITIONS
MAIN_CODE

执行shell脚本

命令执行的三种情况: 别名 --- 内部命令 -- 外部命令

外部命令执行:需要判断内存中是否存在,若不存在就到PATH变量的路径中寻找

shell脚本执行:

path/shell_name --- 路径/文件名

方法一:通过bash命令执行shell脚本

例如:

(1) bash filename

(2) cat filename | bash (可以实现把shell脚本放在服务器上,然后远程执行)

(3) bash < filename

方法二:通过添加执行权限,然后使用相对路径或者绝对路径的方法来执行shell脚本

chmod +x filename; path/filename

shell脚本错误调试

常见的错误分类:

语法错误:会导致后续的命令不继续执行

使用bash -n 检查是否错在错误的命令

命令错误:默认后续的命令还会继续执行

使用bash -x 来跟踪命令的执行过程。 判断是否存在语法错误

逻辑错误:不影响执行,但是输出结果不对

只能使用bash -x 检查

变量

shell中变量存储的不同类型数据都会被当成字符串处理。

变量类型:

  • 内置变量 如:PS1,PATH,UID,HOSTNAME,$$,BASHPID,PPID,$?,HISTSIZE
  • 自定义变量

静态语言和动态语言

  • 静态编译语言:使用变量前,先声明变量类型
  • 动态编译语言:不用事先声明,可随时改变类型

强类型和弱类型语言

  • 强类型语言:不同类型数据操作,必须经过强制转换才同一类型才能运算
  • 弱类型语言:语言的运行时会隐式做数据类型转换

    shell:动态语言、弱类型语言

shell中变量的命令规则:

  • 区分大小写
  • 不能使用内置变量名和保留字
  • 只能使用数字、字母和下划线(数字不能作为开头)

    注意:不支持短横线 “ - ”,和主机名相反

变量定义和引用

  • 普通变量:当前shell
  • 环境变量:当前shell以及子进程
  • 本地变量:当前shell中某个函数

变量赋值:变量名='值'

注意:变量赋值是临时生效,当退出终端后,变量会自动删除,无法持久保存,脚本中的变量会随着脚 本结束,也会自动删除

变量引用:$name或${name}或反引号

  • "$name " 弱引用,其中的变量引用会被替换为变量值(双引号)
  • '$name ' 强引用,其中的变量引用不会被替换为变量值,而保持原字符串(单引号)

显示已定义的所有变量和函数: set

删除变量:unset 变量名

shell特殊变量

  • 环境变量
  • 位置变量
  • 退出状态码变量
  • 只读变量

环境变量:配置shell环境

  • 子进程可以继承,父进程无法使用子进程的环境变量
  • 一般在系统配置文件中使用

范例:查看某个进程的环境变量

  1. 使用pstree命令找到该进程的进程好
  2. cat /proc/进程号/enversion

变量声明:export name=Value或declare -x name=value

引用: $name或${name}

只读变量: readonly,常量。

位置变量:bash shell内置的变量

通过命令行将参数传递给shell脚本的参数

  • $1...n: 对应指定参数的位置,如$1对应shell脚本第一个参数的位置。
  • $0: 脚本名
  • $*: 脚本所有参数,全部参数合为一个字符串($@ 脚本所有参数,每个参数为独立字符串)
  • $#: 脚本参数个数

退出状态码变量:$?

进程执行以后,使用$?保存状态码,$?的取值范围:0-255

  • 0 --- 执行成功
  • 1-255 --- 执行失败

    执行失败有很多种可能性,比如语法错误,文件没找到等。所以不同失败的状态码不一样。

自定义退出状态码: exit   [num]

注意:

  • 脚本中一旦遇到exit命令,脚本会立即终止;终止退出状态取决于exit命令后面的数字
  • 如果exit后面无数字,终止退出状态取决于exit命令前面命令执行结果
  • 如果没有exit命令,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码

linux各种符号处理的优先级:

  1. 首先将命令拆成单词,
  2. 若为别名则替换为原始命令的定义。
  3. 若有花括号{}就把它展开
  4. 若有波浪符就用家目录替换
  5. 若有$()和` `就进行命令的替换
  6. 若有通配符就有符合要求的文件名替换
  7. 最后重定向
  8. 运行命令

shell脚本安全

set -e:如果其中一个命令错误,就中断执行

有时候会产生误杀,比如执行一条命令返回的状态码是非0

set -u: 当一个变量没有定义的时候就退出。避免变量不存在出现的问题。

最新文章

  1. Asp.net MVC中Html.Partial, RenderPartial, Action,RenderAction 区别和用法(mvc部分视图的添加)
  2. databtables 设置(显示)行号
  3. 表单input项使用label,同时引用Bootstrap库,导致input点击效果区增大
  4. 微信中a链接无法进行跳转
  5. vb.net dll创建
  6. @suppressWarnings解释
  7. Singleton、MultiThread、Lib——实现单实例无锁多线程安全API
  8. [Papers]NSE, $u$, Lorentz space [Sohr, JEE, 2001]
  9. (转)Asp.Net MVC中身份认证和授权
  10. C++中求两个正整数的最大公约数和最小公倍数
  11. Tekla Structures 使用类库概览
  12. 转发细节——forward
  13. 小鱼提问1 类中嵌套public修饰的枚举,外部访问的时候却只能Class.Enum这样访问,这是为何?
  14. Web browser的发展史
  15. Python——Label控件说明
  16. webpack4 系列教程(七): SCSS提取和懒加载
  17. Java ThreadLocal的使用
  18. 使用 Chrome 开发者工具进行 JavaScript 问题定位与调试
  19. 测试redis集群的两种方式:分片和哨兵
  20. final用户体验报告

热门文章

  1. vue预渲染及其cdn配置
  2. 论文解读(SelfGNN)《Self-supervised Graph Neural Networks without explicit negative sampling》
  3. Mysql、Oracle锁表处理
  4. 3D 沙盒游戏之人物的点击行走移动
  5. 一文学会text-justify,orientation,combine文本属性
  6. css3 做出顶边倾斜的 梯形 div
  7. 《手把手教你》系列基础篇(九十六)-java+ selenium自动化测试-框架之设计篇-跨浏览器(详解教程)
  8. [笔记] Powerful Number 筛
  9. Docker中级篇,看这篇就对了
  10. 真香!Windows 可直接运行 Linux 了