程序的组成:

程序:算法+数据结构

数据:程序处理的目标

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

算法:处理数据的方式

编程风格:

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

编程语言:

计算机:运行二进制指令

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

编程语言分类:

低级语言

机器语言:二进制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. 安卓记账本开发学习day2

    今天遇到了xml文件报错,Wrong orientation? No orientation specified, and the default is horizontal, yet this la ...

  2. 动手动脑3&课堂作业(四则运算与继承)

    先上结果 Java程序会先把所有的静态模块提取出来优先执行 四则运算主程序代码 1 import java.util.Scanner; 2 3 4 public class main { 5 publ ...

  3. 想要白嫖ppt?记住这几个网站就够了

    良心ppt,超赞! [PPT]:OfficePlushttps://www.officeplus.cn/Template/Home.shtml稻壳Docerhttps://www.docer.com/ ...

  4. Django学习——Django测试环境搭建、单表查询关键字、神奇的双下划线查询(范围查询)、图书管理系统表设计、外键字段操作、跨表查询理论、基于对象的跨表查询、基于双下划线的跨表查询

    Django测试环境搭建 ps: 1.pycharm连接数据库都需要提前下载对应的驱动 2.自带的sqlite3对日期格式数据不敏感 如果后续业务需要使用日期辅助筛选数据那么不推荐使用sqlite3 ...

  5. Java遇上SPL:架构优势和开发效率,一个不放过

    摘要:如果我们在Java中也提供有一套完整的结构化数据处理和计算类库,那这个问题就能得到解决:即享受到架构的优势,又不致于降低开发效率. 本文分享自华为云社区<Java结构化处理SPL>, ...

  6. 通过Go实现AES加密和解密工具

    本文包含如下两个内容: AES加密介绍及实现原理 Go实现AES加密和解密工具 AES加密介绍及实现原理 AES( advanced encryption standard)使用相同密钥进行加密和解密 ...

  7. 面试官问:Go 中的参数传递是值传递还是引用传递?

    一个程序中,变量分为变量名和变量内容,变量内容的存储一般会被分配到堆和栈上.而在 Go 语言中有两种传递变量的方式值传递和引用传递.其中值传递会直接将变量内容附在变量名上传递,而引用传递会将变量内容的 ...

  8. 斯坦福NLP课程 | 第15讲 - NLP文本生成任务

    作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www. ...

  9. dd-文件系统内容映射

    复制文件并对原文件的内容进行转换和格式化处理. 语法 dd [OPTIONS]... 选项 if=filename 指定源文件. of=filename 指定目的文件. ibs=bytes 指定一个块 ...

  10. column-文本对齐输出

    文本输出对齐,可以指定对应的分隔符,将上下文的字符串按分隔符列对齐. 语法 column [选项] 选项 -s 设置分隔符,默认为空格. -t 判断输入的列数来创建一个表,使列对齐. -c 设置显示的 ...