在众多语言中,大致可以将其分为两类

  编译型语言(静态语言):C,C++等,源代码需在开发环境中编写之后编译器编译,编译的过程最简单的理解就是将源代码转换为可以在机器上运行的二进制代码(机器码),源代码改动后,必须重新编译

  解释性语言(动态语言):shell,perl,python等,由解释器边解释边执行,一般解释器都是由静态语言开发的程序

对于现在的linux发行版上大部分所采用的bash来说,bash脚本编程可以理解为:bash是由静态语言开发的程序,我们所编写的shell脚本其实就是我们在命令行下可以执行的命令(这些命令很可能都是由静态语言开发并编译好的)按照我们实际的需求去组织,控制这些命令的执行流达到目的,shell脚本对于系统自动化管理尤为重要

 我们知道,由于字符和数字的存储格式不同,所以需要的存储空间也不尽相同,而在程序的运行过程中,又经常需要临时性的保存数据,所以就经常需要用到变量,变量简单的理解就是内存中的存储空间,内存是有编址的,要向变量中读取数据,就需要向该变量所对应的地址单元中填写或者是读取数据,所以可以理解为在进程内部维护有变量名到期对应的内存地址的映射关系,正是因为不用类型的数据的存储格式以及所需空间都是不尽相同的,所以变量就分为了很多类型,在静态语言中,要使用变量就必须事先声明其类型以及存储空间,否则会造成缓冲区溢出等问题,所以静态语言对于变量的控制是非常严格的,在解释性语言当中,例如shell,在使用变量的时候不需要声明其类型,个人理解是因为shell这个程序会根据赋值情况检查,然后再shell内部做临时声明,相当于就是shell中的变量由shell程序来作为保护。shell中的变量默认都是字符型,不能进行算术运算

 

 shell的变量类型:按照作用域的不同划分

      环境变量:在当前shell及其子shell中有效

      本地变量:只在当前shell有效

      局部变量:在一个代码片段生效(函数中)

      系统变量:系统设定的变量,例如$?

      位置变量

本地变量声明赋值:variable=value

本地变量使用export关键字导出就可以成为环境变量:export variable

局部变量使用local关键字

查看当前系统变量:set

查看当前系统环境变量:export或printenv

 在shell中,变量引用使用${variable},大部分情况下花括号可以省略,以一个例子说明:

         NAME=jerr

     echo $NAME 和echo ${NAME}的结果是一样的,但如果要输出为jerry

    echo ${NAME}y的输出结果就是jerry

    echo $NAMEy的输出结果就是$NAMEy,这就是加花括号与不加时的区别

在执行一个shell脚本时,会启动一个子shell去执行,而不是在当前shell执行

  命令行启动的脚本:当前shell的环境变量对其生效

  非命令行启动的脚本:需按需求定义,因为其不是从shell启动就无法继承shell环境变量,可使用命令路径