程序的组成:

程序:算法+数据结构

数据:程序处理的目标

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

算法:处理数据的方式

编程风格:

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

编程语言:

计算机:运行二进制指令

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

编程语言分类:

低级语言

机器语言:二进制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. Java核心知识1:泛型机制详解

    1 理解泛型的本质 JDK 1.5开始引入Java泛型(generics)这个特性,该特性提供了编译时类型安全检测机制,允许程序员在编译时检测到非法的类型. 泛型的本质是参数化类型,即给类型指定一个参 ...

  2. python基础练习题(题目 将一个整数分解质因数。例如:输入90,打印出90=2*3*3*5)

    day9 --------------------------------------------------------------- 实例014:分解质因数 题目 将一个整数分解质因数.例如:输入 ...

  3. 20202127 实验二《Python程序设计》实验报告

    20202127 2021-2022-2 <Python程序设计>实验二报告 课程:<Python程序设计>班级: 2021姓名: 马艺洲学号:20202127实验教师:王志强 ...

  4. vscode设置vue文件高亮显示

    打开VS Code,左上角 文件->首选项->设置->文本编辑器->文件,点击右侧的"在settings.json中编辑",进入settings.json文 ...

  5. python学习-Day29

    目录 今日内容详细 反射实际案例 面向对象的双下方法 __ str __ __ del __ __ getattr __ __ setattr __ __ call __ __ enter __ __ ...

  6. python学习-Day23

    目录 今日内容详细 logging模块(续集) 日志模块的主要组成部分 配置字典 配置字典在项目中的使用 第三方模块 如何利用工具下载第三方模块 查看当前解释器下载的第三方模块 下载第三方模块 直接使 ...

  7. 忘带U盘了??别急!一行python代码即可搞定文件传输

    近日发现了python一个很有趣的功能,今天在这里给大伙儿做一下分享 需求前提 1.想要拷贝电脑的文件到另一台电脑但是又没有U盘2.手机上想获取到存储在电脑的文件3.忘带U盘- 您也太丢三落四了吧,但 ...

  8. latex中显示代码

    如何在latex中添加代码模块 首先在开头导入以下的包 \usepackage{listings} \usepackage{ctex} % 用来设置附录中代码的样式 \lstset{ basicsty ...

  9. JUC自定义线程池练习

    JUC自定义线程池练习 首先上面该线程池的大致流程 自定义阻塞队列 首先定义一个双向的队列和锁一定两个等待的condition 本类用lock来控制多线程下的流程执行 take和push方法就是死等, ...

  10. 谈谈markdown

    谈谈markdown 欢迎关注我的博客,️点他即可. 最近一年开始学习有关编程的内容了. 迷上代码的我开始接触到一些好玩的东西,我发现很多事情都可以由代码来完成,甚至是ppt.同学就经常说我疯掉了,连 ...