上篇博客我们介绍了bash的一些基本功能,这是我们平时操作最频繁的。本篇博客我们介绍bash的变量,为后面编写shell脚本做铺垫。
变量是计算机内存的单元,其中存放的值可以改变。
当 shell 脚本需要保存一些信息时,如一个文件名或者一个数字,就把它放在一个变量里。每个变量都有一个名字,可以根据名字来引用变量。
使用变量可以保存有用信息,使系统获知用户的相关设置,变量也可以保存暂时信息。
用户自定义变量也就是本地变量。只在当前 shell 中生效。
class="brush:java;gutter:true;">变量名=变量值
$变量名
set
set 是查看当前系统中定义的所有变量。
unset 变量名
环境变量主要保存的是和系统操作环境相关的变量。
前面讲的用户自定义变量(本地变量)只在当前shell 中生效,而环境变量会在当前shell和这个shell的所有子shell当中生效,如果把环境变量写入相应的配置文件中,那么这个环境变量就会在所有的shell中生效。
export 变量名=变量值
env
前面讲的 set 命令是查看所有变量,而 env 是查看环境变量。
$变量名 #查看环境变量 unset 变量名 #删除环境变量
这两个和本地变量一样。
我们知道调用命令必须要是在当前目录,或者是用绝对路径进行。但是实际上我们调用某个命令直接使用命令名就可以了,比如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 变量的值。
注意:越往后面的配置文件,里面配置的变量内容优先级越高。