上篇博客我们介绍了bash的一些基本功能,这是我们平时操作最频繁的。本篇博客我们介绍bash的变量,为后面编写shell脚本做铺垫。
1、什么是变量
变量是计算机内存的单元,其中存放的值可以改变。
当 shell 脚本需要保存一些信息时,如一个文件名或者一个数字,就把它放在一个变量里。每个变量都有一个名字,可以根据名字来引用变量。
使用变量可以保存有用信息,使系统获知用户的相关设置,变量也可以保存暂时信息。
2、变量的声明规则
3、变量的分类
4、用户自定义变量的用法
用户自定义变量也就是本地变量。只在当前 shell 中生效。
①、变量定义
变量名=变量值
②、变量调用
$变量名
③、变量查看
set
set 是查看当前系统中定义的所有变量。
④、变量删除
unset 变量名
5、环境变量的用法
环境变量主要保存的是和系统操作环境相关的变量。
前面讲的用户自定义变量(本地变量)只在当前shell 中生效,而环境变量会在当前shell和这个shell的所有子shell当中生效,如果把环境变量写入相应的配置文件中,那么这个环境变量就会在所有的shell中生效。
①、通过 pstree 命令区分当前shell 的级别是父还是子
②、声明环境变量
export 变量名=变量值
③、查询所有环境变量
env
前面讲的 set 命令是查看所有变量,而 env 是查看环境变量。
④、查看、删除指定环境变量
$变量名 #查看环境变量
unset 变量名 #删除环境变量
这两个和本地变量一样。
⑤、系统查找命令的路径环境变量 $PATH
我们知道调用命令必须要是在当前目录,或者是用绝对路径进行。但是实际上我们调用某个命令直接使用命令名就可以了,比如cd,ls等等这些常用的,这是为什么呢?
原因就是在 $PATH 里面我们已经定义好了,我们执行某个名称的命令,系统会首先去$PATH里面查找,如果找不到才会报找不到命令错误。
首先看一下$PATH:
可以看到,$PATH 里面都是保存的一些路径,然后通过:分隔。
前面我们写过一个 hello.sh 的脚本,我们知道要想执行它,必须首先赋予可执行权限,然后要么在当前目录通过./hello.sh来执行,要么通过绝对路径/tmp/hello.sh来执行。如果我们想直接通过 hello.sh 来执行呢?
解决办法就将hello.sh的所在路径添加到 $PATH 变量中,如下:
⑥、定义系统提示符的变量 $PS1
6、位置参数变量的用法
7、预定义变量的用法
其实预定义变量也是位置参数变量的一种,有如下几种用法:
8、声明变量类型 declare
9、数值运算的三种方法
①、declare -i
②、expr 或 let 数值运算工具
③、$((运算式)) 或 $[运算式]
10、运算符及其优先级顺序
11、变量测试与替换
12、环境变量配置文件
前面我们在将环境变量的时候,我们将脚本的路径加入到 $PATH 路径中,然后就可以直接通过脚本的名称来执行脚本。但是如果系统重启之后,发现又必须要重新加入到 $PATH 变量中才可以。那么有没有让它一直生效的方法呢?
解决办法就是在环境变量配置文件中加入脚本的路径。
环境变量配置文件中主要定义对系统的操作环境生效的系统默认环境变量,比如 PATH,HISTSIZE,PS1,HOSTNAME等默认环境变量。分别有以下配置文件:
下图是环境变量文件的读取顺序:(用户每次重新登录的时候就会重新读取下面的配置文件)
我们知道 $PATH 变量,用户每次登录,就会从上面的文件读取顺序读取所有配置文件,最后得到 $PATH 变量的值。
注意:越往后面的配置文件,里面配置的变量内容优先级越高。