上篇博客咱们介绍了bash的一些基本功能,这是咱们平时操做最频繁的。本篇博客咱们介绍bash的变量,为后面编写shell脚本作铺垫。java
变量是计算机内存的单元,其中存放的值能够改变。shell
当 shell 脚本须要保存一些信息时,如一个文件名或者一个数字,就把它放在一个变量里。每一个变量都有一个名字,能够根据名字来引用变量。bash
使用变量能够保存有用信息,使系统获知用户的相关设置,变量也能够保存暂时信息。工具
用户自定义变量也就是本地变量。只在当前 shell 中生效。测试
变量名=变量值
$变量名
set
set 是查看当前系统中定义的全部变量。3d
unset 变量名
环境变量主要保存的是和系统操做环境相关的变量。blog
前面讲的用户自定义变量(本地变量)只在当前shell 中生效,而环境变量会在当前shell和这个shell的全部子shell当中生效,若是把环境变量写入相应的配置文件中,那么这个环境变量就会在全部的shell中生效。内存
export 变量名=变量值
env
前面讲的 set 命令是查看全部变量,而 env 是查看环境变量。博客
$变量名 #查看环境变量 unset 变量名 #删除环境变量
这两个和本地变量同样。class
咱们知道调用命令必需要是在当前目录,或者是用绝对路径进行。可是实际上咱们调用某个命令直接使用命令名就能够了,好比cd,ls等等这些经常使用的,这是为何呢?
缘由就是在 $PATH 里面咱们已经定义好了,咱们执行某个名称的命令,系统会首先去$PATH里面查找,若是找不到才会报找不到命令错误。
首先看一下$PATH:
能够看到,$PATH 里面都是保存的一些路径,而后经过:分隔。
前面咱们写过一个 hello.sh 的脚本,咱们知道要想执行它,必须首先赋予可执行权限,而后要么在当前目录经过./hello.sh来执行,要么经过绝对路径/tmp/hello.sh来执行。若是咱们想直接经过 hello.sh 来执行呢?
解决办法就将hello.sh的所在路径添加到 $PATH 变量中,以下:
其实预约义变量也是位置参数变量的一种,有以下几种用法:
前面咱们在将环境变量的时候,咱们将脚本的路径加入到 $PATH 路径中,而后就能够直接经过脚本的名称来执行脚本。可是若是系统重启以后,发现又必需要从新加入到 $PATH 变量中才能够。那么有没有让它一直生效的方法呢?
解决办法就是在环境变量配置文件中加入脚本的路径。
环境变量配置文件中主要定义对系统的操做环境生效的系统默认环境变量,好比 PATH,HISTSIZE,PS1,HOSTNAME等默认环境变量。分别有如下配置文件:
下图是环境变量文件的读取顺序:(用户每次从新登陆的时候就会从新读取下面的配置文件)
咱们知道 $PATH 变量,用户每次登陆,就会从上面的文件读取顺序读取全部配置文件,最后获得 $PATH 变量的值。
注意:越日后面的配置文件,里面配置的变量内容优先级越高。