程序的组成:

程序:算法+数据结构

数据:程序处理的目标

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

算法:处理数据的方式

编程风格:

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

编程语言:

计算机:运行二进制指令

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

编程语言分类:

低级语言

机器语言:二进制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. uniapp-uni.setNavigationBarColor 动态修改顶部背景颜色

    uni.setNavigationBarColor({ frontColor: '#ffffff', backgroundColor: "#3583ff" })

  2. HCIE-SEC笔记-EVENG模拟器安装

    EVEng模拟器安装: 准备:Vmware 16.0 EVEng EVE-NG-Win-Client-Pack.exe [抓包,内置wireshark,内置vnc,用来打开windows系统] Win ...

  3. ArcGIS使用技巧(四)——山体阴影

    新手,若有错误还请指正! 最近在制图的时候出现如下的情况(图1),怎么调整Display的三个参数都没用. 图 1 查看其信息,发现dem的像元大小为0.00027(图2),是未投影的 图 2 查看A ...

  4. oracle split 以及 简单json解析存储过程

    BEGIN; 由于之前工作上需要在oracle中做split功能以及json格分解.然后经过一番google和优化整合,最后整理到一个存储过程包中,易于管理,代码如下: 1.包定义: CREATE O ...

  5. Google广告批量投放脚本

    该脚本文件是一个转化文件,将编辑的Google投广告模板转化成Google批量投放广告的脚本文件,实现批量投放广告,节省投广时间.PS:要与相应的模板结合使用,投广告模板在本人博客的文件中,可以下载. ...

  6. CTO 说了,如果发现谁用 kill -9 关闭程序就开除

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 来源:blog.csdn.net/qq_33220089          正文    kil ...

  7. CentOS 8 重启不能DHCP获取IP的解决方法

    一个执着于技术的公众号 今天遇到一个神奇的现象,我对CentOS 8系统做初始化之后再重启系统,发现系统不能通过NetworkManager获取DHCP IP了 查了系统日志发现是: Apr 30 0 ...

  8. drf-Serializers

    What is serializers? serializers主要作用是将原生的Python数据类型(如 model querysets )转换为web中通用的JSON,XML或其他内容类型. DR ...

  9. C++进阶-3-5-list容器

    C++进阶-3-5-list容器 1 #include<iostream> 2 #include<list> 3 #include<algorithm> 4 usi ...

  10. hashlib加密模块和logging模块,购物车项目

    hashlib加密模块 简介 hashlib模块是一个提供了字符串加密功能的模块,包含MD5和SHA的加密算法.具体的加密支持有: MD5,sha1,sha224,sha256, sha384, sh ...