Bash脚本
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bash脚本相关的知识,希望对你有一定的参考价值。
在bash中最常见的就是一条一条的输入单个命令后执行,但是这种执行的效率十分的低,所以为了方便和高效率,所以我们需要一次性的执行多条命令。能够完成这种操作的方法有很多,比如:
命令1$命令2$...
命令1|命令2|... 进程之间通信(IPC)
命令1;命令2;...
有点时候一次性的执行很多命令需要逻辑,需要分出先后,所以有了:顺序执行结构:
命令1;命令2;... (分号前后空格可有可无)
除了顺序,还有选择执行结构,这种结构能够执行逻辑运算:
与:逻辑乘法在bash中用&&表示,这是一个双目运算符
当我们执行一个命令的时候会有返回值,为0时代表执行成功,为1-255时代表执行失败。所以可以写出以下的推论:
0:SUCCESS --> true
1-255:FAILURE --> false
true&&true = true
true&&false = false
false&&true = false
false&&false = false
只要第一个操作数为false,则其逻辑运算的结果一定为false
例如:命令1&&命令2,如果命令1能够成功执行,则命令2会被执行;如果命令1执行失败,则命令2不会被执行
或:逻辑加法,用||表示,这是一个双目运算符
和与一样,也可以得出以下结论:
true || true = true
true || false = true
false || true = true
false || false = false
只要第一个操作数为true,则其逻辑运算的结果一定为true
例如:命令1 || 命令2,只要命令1能够成功执行,命令2就没有必要执行;只有当命令1执行失败的时候,命令2才会被执行
非:逻辑取反,!
!STRING:读取命令历史空间的内容
! true=false
! false=true
! COMMAND(!与命令之间要有空格)
! COMMAND1 && COMMAND2 相当于 COMMAND1 || COMMAND2
! COMMAND1 || COMMAND2 相当于 COMMAND1 && COMMAND2
异或:
比对两个操作数是否不同,如果不同则逻辑运算结果为真,如果相同则逻辑运算结果为假
逻辑运算符号优先级
! > && > ||
很多的命令组合在一起就变成了shell脚本编程。编程就是编写程序源代码,为了能够让用户在使用计算机的时候,可以让计算机以非交互式的方式完成某些任务需要将这些任务编制成为一个文件,让计算机顺序读取,从而实现特定的功能。shell脚本编程是过程式编程语言,解释运行的语言,依赖于外部程序文件运行的语言。
那么shell脚本到底是什么呢?
1.纯文本文档——文件中所存储的数据都是以字符为单位进行存储的
2.根据用户的需求来解决用户问题的大量命令的组合体
3.很多命令不具备执行幂等性(任何命令多次执行的结果是一致的)在shell脚本中就需要使用大量的程序逻辑来判断某个命令是否满足其运行条件,以避免在运行过程中出现严重错误
简单的来说就是把一大堆的命令写在一个普通文件中,然后使其能够执行就是一个脚本。而shell脚本中的包含的内容有:
1.首行必须是shebang,解释器路径,必须占据绝对行首:在执行时启动相应的解释器以解释脚本内诸多的命令
#!/bin/bash
#!/bin/sh
#!/usr/bin/python
#!/usr/bin/perl
2.在shell脚本中除了shebang外,以#占据绝对行首的内容,均为注释行,解释器会忽略这样的行的内容
3.解释器会忽略脚本中所有的空白行
4.大量的命令和关键字(if、else、then、while、do、...)
注意:shell脚本一旦运行,是在当前的shell中根据shebang的指示,开启一个解释器(子shell)来解释执行代码内容,shell脚本的内容是在一个子shell进程中实现的,所以可以使用exit命令退出。脚本的运行方法:
1.为脚本文件赋予执行权限,直接运行此文件(chmod +x Script_FILE)
如果在执行脚本时,只写脚本文件名而不给出路径的话,必须确保PATH变量中保存的路径下能够找到该脚本文件。
2.直接使用解释器运行脚本,将脚本作为解释器命令的参数
bash Script_FILE
我们可以利用文本编辑工具来编写shell脚本,例如:nano、vi、vim、emacs、pico,推荐使用vim。在大家的约定下,一般脚本文件名的后缀为.sh,不过也可以不加,只是有的文本编辑器会将其视为普通文件因而没有代码的高亮显示功能。
以上是关于Bash脚本的主要内容,如果未能解决你的问题,请参考以下文章
如何在路径有空格的另一个 bash 脚本中运行 bash 脚本?