程序的组成:

程序:算法+数据结构

数据:程序处理的目标

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

算法:处理数据的方式

编程风格:

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

编程语言:

计算机:运行二进制指令

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

编程语言分类:

低级语言

机器语言:二进制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: 当一个变量没有定义的时候就退出。避免变量不存在出现的问题。

Linux shell脚本基础的更多相关文章

  1. 详细介绍Linux shell脚本基础学习

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...

  2. Linux shell脚本基础学习详细介绍(完整版)二

    详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续 ...

  3. Linux shell脚本基础学习详细介绍(完整版)一

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...

  4. Linux shell脚本 基础

    一.shell中三个引号的用法 1.单引号:所见即所得 例如:var=123 var2='${var}123' echo var2 var2结果为${var}123 2.双引号:输出引号中的内容,若存 ...

  5. 阿里Linux Shell脚本面试25个经典问答

    转载: 阿里Linux Shell脚本面试25个经典问答 Q:1 Shell脚本是什么.它是必需的吗? 答:一个Shell脚本是一个文本文件,包含一个或多个命令.作为系统管理员,我们经常需要使用多个命 ...

  6. Linux shell入门基础(六)

    六.Shell脚本编程详解 将上述五部分的内容,串联起来,增加对Shell的了解 01.shell脚本 shell: # #perl #python #php #jsp 不同的脚本执行不同的文本,执行 ...

  7. 老李分享:《Linux Shell脚本攻略》 要点(一)

    老李分享:<Linux Shell脚本攻略> 要点(一)   第一章:Shell起步基础 1.变量:在bash中,每一个变量的值都是字符串.无论你给变量赋值时,有没有使用引号,值都会以字符 ...

  8. linux ——shell 脚本

                                                      linux—shell 脚本  精简基础                 2018/10/30 13 ...

  9. linux shell脚本相关知识

    最近的项目中,有一个编写linux shell脚本的任务.由于之前不是很熟悉,在这个过程中遇到了很多困难,查找了很多资料,也收获了很多.下面是linux shell脚本中常用的知识总结. 1基础语法 ...

随机推荐

  1. Fabric2.2中的Raft共识模块源码分析

    引言 Hyperledger Fabric是当前比较流行的一种联盟链系统,它隶属于Linux基金会在2015年创建的超级账本项目且是这个项目最重要的一个子项目.目前,与Hyperledger的另外几个 ...

  2. Pytest系列(一)初次了解

    在之前,我分享过unittest系列,后来有很多人问我,能不能出pytest的教程,正好最近在整理pytest相关的资料,那么,就趁着这个机会,去和大家分享一下pytest系列. pytest是一个非 ...

  3. Rust如何开发eBPF应用(一)?

    前言 eBPF是一项革命性的技术,可以在Linux内核中运行沙盒程序,而无需重新编译内核或加载内核模块.它能够在许多内核 hook 点安全地执行字节码,主要应用在云原生网络.安全.跟踪监控等方面. e ...

  4. .NET性能优化-你应该为集合类型设置初始大小

    前言 计划开一个新的系列,来讲一讲在工作中经常用到的性能优化手段.思路和如何发现性能瓶颈,后续有时间的话应该会整理一系列的博文出来. 今天要谈的一个性能优化的Tips是一个老生常谈的点,但是也是很多人 ...

  5. C# 一维数组如何快速实现数组元素的数据类型的转换?

    一.场景假设 假设有一串字符串如下所示,字符串中的数字之间已用英文状态下的逗号隔开.要求用此字符串中的数字快速生成int类型的数组,且尽可能使用最少的代码量. string str = "1 ...

  6. 抽象类 & 接口

    抽象类 模板设计模式 把每个类中类似的job 方法"提炼"出来, 成为一个抽象函数(同时也有一个抽象类) 然后把另外calcuateTime这个函数内容,"提炼" ...

  7. 自学java的困难

    在自学的一些基础阶段,倒是没什么太大的问题,但是在想搞一个项目的时候,就显得手足无措了.因为,很多博主讲的的那些,都行需要一定的条件,比如前端框架,数据库的数据等等. 简单一点的SSM框架整合相对简单 ...

  8. 从防御者视角来看APT攻击

    前言 APT防御的重要性毋庸讳言,为了帮助各位师傅在防御方面建立一个总体认识,本文会将APT防御方法分为三类,分别是:监控.检测和缓解技术,并分别进行梳理,介绍分析代表性技术.这一篇分析现有的监控技术 ...

  9. 前端HTML-01

    HTML是什么? 超文本标记语言,是一种用于创建网页的标记语言 文件的扩展名:.html或者.htm HTML不是什么? HTML是一种标记语言,不是变成语言. HTML文档结构 <!DOCTY ...

  10. 机器学习实战-k近邻算法

    写在开头,打算耐心啃完机器学习实战这本书,所用版本为2013年6月第1版 在P19页的实施kNN算法时,有很多地方不懂,遂仔细研究,记录如下: 字典按值进行排序 首先仔细读完kNN算法之后,了解其是用 ...