bash的特性之多命令执行的逻辑关系:
1.命令替换
COMMAND1 $(COMMAND2)
2.管道
COMMAND1 | COMMAND2 | COMMAND3 ...
3.顺序执行结构
COMMAND1 ; COMMAND2 ; COMMAND3 ...
4.选择执行结构:
若是...那么...
要么...要么...
逻辑运算:
与:逻辑乘法,1--真,0--假,&&,双目操做符
1 && 1 = 1
1 && 0 = 0
0 && 1 = 0
0 && 0 = 0python
"与"运算的短路运算法则:只要第一个操做数为false,则其逻辑运算结果必定为false; 或:逻辑加法,1--真,0--假,||,双目操做符 1 || 1 = 1 1 || 0 = 1 0 || 1 = 1 0 || 0 = 0 "或"运算的短路运算法则:只要第一个操做数为true,则其逻辑运算结果必定为true; 非:逻辑取反,1--真,0--假,!,单目操做符 !0 = 1 !1 = 0 命令的执行状态返回值: SUCCESS:0--TURE(true) FAILURE:1-255--FALSE(false) COMMAND1 && COMMAND2 表示: 1.若是COMMAND1可以成功执行,那么将会执行COMMAND2; 2.若是COMMAND1执行失败,那么COMMAND2将不会被执行; COMMAND1 || COMMAND2 表示: 1.只有COMMAND1执行失败,COMMAND2才会被执行; 2.若是COMMAND1执行成功,那么COMMAND2就不会被执行; !COMMADN1 && COMMAND2 至关于 COMMAND1 || COMMAND2 !COMMAND1 || COMMAND2 至关于 COMMAND1 && COMMAND2 德·摩根定律 !(COMMAND1 && COMMAND2) || COMMAND3 !(COMMAND1 || COMMAND2) && COMMAND3 !A && B = A || B !A || B = A && B !(A && B) = !A || !B !(A || B) = !A && !B 三种逻辑运算的优先级: !>&&>|| 示例: 若是用户user4存在而且其家目录也存在,那么就执行userdel -r user4命令; id user4 && ls -d /home/user4 && userdel -r user4
bash脚本编程:
什么叫编程?
使用人类天然语言或机器语言进行程序源代码书写的过程。算法
为何要编程? 为了可以让用户在使用计算机的时候,可让计算机以非交互的方式完成某些任务;此时,用户须要将此类任务编辑称为一个文件,而且让计算机按照特定书序进行任务读取,从而实现预期的功能; 为了让计算机可以解读此类文件的内容并正确的予以执行,必须将程序源代码文件转换为计算机能够直接识别并使用的二进制格式,此转换过程称为编译;而想要完成编译过程,必须使用特定的编译器工具;所以,不管使用何种编程语言进行程序编写,都必须严格按照编译器所可以识别的特定格式和语法结构进行程序编写; 编程语言: 高级语言: 根据源代码的处理方式分类: 编译型语言: 源代码 --> 编译器(编译) --> [连接器(连接) --> ] 汇编器(汇编) --> 能够执行的二进制代码文件; 解释型语言 源代码 --> 解释器(逐行解释) --> 边解释边执行 根据编程过程当中的功能实现是调用库仍是调用外部程序文件分类: 完整编程语言: 利用库或编程组件进行编程; 脚本编程语言: 利用解释器调用被选择的外部应用程序; 根据程序的编写规范分类: 过程式语言: 程序 = 指令 + 数据 以指令为中心,围绕指令的功能实现设计数据和数据结构,数据为指令服务; 算法和指令的实现形式: 顺序执行 选择执行 循环执行 面向对象语言: 程序 = 算法 + 数据结构 以数据和数据结构为中心,将数据实例化,围绕数据的需求来部署算法; 类(Class):被实例化的数据; 属性(attibution):同一类中的不一样对象的区分依据; 方法(method):类的正确的操做方法; 低级语言: 汇编语言: 机器语言:二进制语言 shell脚本编程——bash脚本编程: 过程式编程语言,解释运行的编程语言,脚本类语言(依靠外部应用程序文件运行) shell脚本究竟是什么? 1.纯文本文档——文件中全部存储或包含的指令+数据都是以字符为单位进行存储的; 2.根据用户的需求来解决用户问题的简单或复杂的命令组合体; 3.是一种具备"执行幂等性"的程序实体; 执行幂等性:任何命令的一次执行结果和屡次执行结果是一致的; 注意: 不少命令都不具有"执行幂等性",所以在shell脚本中须要使用大量的程序逻辑来判断某个命令是否符合其运行条件,从而避免在运行过程当中出现的严重错误; shell脚本中的代码内容如何书写? 1.首行必须是shebang,即:解释器程序的绝对路径,必须占据绝对行首且必须单独占据第一行;在执行脚本时,会根据shebang的指示,启动相应的解释器以解释脚本被诸多的命令; #!/bin/bash #!/bin/sh #!/usr/bin/python #!/usr/bin/perl ... 2.在shell脚本中,除了shebang以外,全部行首为#字符的行,均被解释为注释行;即:解释器只会解释其内容,但并不予以执行; 3.解释器会忽略脚本文件中全部的空白行;空白行指的是:在一行文本中,除了空白字符,空格字符,制表字符以外不具有其余任何类型字符的行; 4.大量的命令和关键字 命令:内部或外部应用程序 关键字:内置于shell,只能在某种特定结构体中执行的命令;keyword; 如:if, else, then, do, while, for, select, until, case, fi, esac,... 5.shell中的全部的特殊功能字符; 注意:全部被编写进shell脚本文档的命令、关键字及符号必须是ASCII编码格式的字符,其余编码格式的字符能够出如今shell脚本文件中,但不具备任何特殊含义; 如何编写shell脚本? 能够利用全部的文本文档编辑工具进行shell脚本编写,如: nano, vi, vim, pico, emacs, ... 一般在Linux的各发行版本中,推荐使用vim; 脚本文件的命名方式: 通常状况下,会为脚本设置".sh"的名称后缀;较低版本的编辑工具,会根据文件的后缀名称来识别是否为shell脚本文件;交高版本的文本编辑工具,如vim7,无需过多的关系文件后缀名的问题。 脚本的运行方式: 1.为脚本文件赋予执行权限,能够直接以绝对路径或相对路径的方式运行此文件; # chmod +x /PATH/TO/SOME_SCRIPT_FILE # /PATH/TO/SOME_SCRIPT_FILE 注意:若是脚本文件所在目录路径存储于PATH变量中,则直接以脚本文件名来执行便可; 2.直接使用解释器运行脚本,将脚本文件做为解释器程序的参数; # bash /PATH/TO/SOME_SCRIPT_FILE bash命令的经常使用选项: -x:使bash在解释脚本的过程展现在标准输出上;通常用于为shell脚本排错 -n:对脚本文件进行预执行,以分析脚本中是否存在语法类错误;若是没有错误,则不输出任何信息;相反,则输出简洁的提示信息;具体的错误定位须要自行判断; 注意:此种方式中,脚本文件是否有执行权限并非很重要的属性; 注意:以上两种方式,在执行脚本时,会在当前shell中开启一个新的子shell以运行脚本;通常状况下,当脚本运行结束,该子shell也会被随之销毁;所以,全部在脚本中定义的变量,在脚本的末尾处,最好将其明确的撤销; 3.使用source命令运行脚本; # source /PATH/TO/SOME_SCRIPT_FILE # . /PATH/TO/SOME_SCRIPT_FILE 注意: 1.source命令不会在运行脚本时开启子shell,而是在当前shell中运行; 2.使用source命令执行的脚本中不要包括诸如exit类的命令;