Linux 中变量的取用与设定
优质博文:IT-BLOG-CN
Linux是一个多人多任务的环境,每个人登录系统都能取得一个bash shell,每个人都能够使用bash下达mail这个指令来接收自己的邮箱等等。问题是,bash如何得知你的邮箱是那个文件?这就需要『变量』的帮助。
一、什么是变量
【1】变量的可变性与方便性: 简单的说,变量就是让一个特定的字符串代表不固定的内容。例如,每个账号的邮件预设是以MAIL这个变量来进行存取的。当zzx用户登录时,他便会去MAIL这个变量,而这个变量的内容其实是/var/spool/mail/zzx,那如果 bird登录,他的变量MAIL的内容就是/var/spool/mail/bird。而我们使用信件读取指令mail来读取自己的邮箱信件。
【2】影响bash环境操作的变量: 例如PATH变量,你能不能在任何目录下执行某个指令,与PATH这个变量有很大关系。例如你下达ls这个指令时,系统就是通过PATH这个变量里面的内容所记录的路径顺序来搜索指令的。如果搜索完PATH变量内的路径还找不到ls这个指令时,就会在屏幕上显示『 command not found 』的错误讯息了。在Linux System下,所有的线程都是需要一个执行码,当正确登入Linux后,你就有一个bash执行程序,也才真正的经由bash来跟系统沟通。由于系统需要一些变量来提供他自己数据的存取(或者是一些环境的设定参数值,例如是否要显示彩色等等),所以就有一些所谓的『环境变量』需要来读入系统中,这些环境例如PATH、HOME、MAIL、SHELL等等。为了区别与自定义变量的不同,环境变量通常以大写字符来表示。
【3】脚本程序设计(shell script)的好帮手: 在个人设定方面,例如我们要写一个大型script时,有些数据可能由于用户习惯的不同而有差异,比如说路径,由于路径在script被使用的相当多,如果下次换一部主机,都要修改 script里面的所有路径,那一定很low,这个时候就使用变量,而该变量的定义写在最前面,后面相关的路径名称都以变量来取代,那到时候只需要修改一行就等于修改了全部路径,相当方便。
二、变量的取用与设定
【1】变量的取用(echo) : 利用echo就能够读取变量,只需要在变量前加上$符号,或者用${变量}的方式读取内容。
[root@learnVM 桌面]# echo $PATH
:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin
[root@learnVM 桌面]# echo ${PATH}
【2】变量与变量内容之间如何设定与修改: 用等号(=)连接变量与他的内容就好。
[root@learnVM 桌面]# echo $username
<= 目前没有查询到任何数据,因为此变量为被设定。
[root@learnVM 桌面]# username=zzx
[root@learnVM 桌面]# echo $username
zzx <= 为我们设定的username值。
【3】变量的设定规则:
①、等号两边不能直接接空格符。
②、变量名称只能是英文字母与数字,但是开头字符不能时数字。
③、变量内容若有空格符可使用双引号『"』或单引号『'』将变量内容结合起来。
[root@learnVM 桌面]# test="i am is $username" <= 双引号的特殊字符如$等,可以保有原本的特性
[root@learnVM 桌面]# echo $test
i am is zzx <= 对$username进行了解析
[root@learnVM 桌面]# test='i am is $username' <= 单引号的特殊字符,仅为一般字符,纯文本。
[root@learnVM 桌面]# echo $test
i am is $username <= 不对$username进行了解析
④、可以使用跳脱字符『 』将特殊符号(如:[Enter],$, ,空格符,’ 等)
[root@learnVM 桌面]# test=i am is zzx
[root@learnVM 桌面]# echo $test
i am is zzx
⑤、变量值是一串指令所提供的信息时,可以使用反单引号『指令』或『$(指令) 』,例如想要取核心版本:
[root@learnVM 桌面]# version=`uname -r`
[root@learnVM 桌面]# echo $version
2.6.32-642.el6.x86_64
⑥、若该变量为扩展变量内容时,则可用 “$变量名称” 或 ${变量} 累加内容,如下:
[root@learnVM 桌面]# test=i am is zzx
[root@learnVM 桌面]# test=${test} cool <= 或者使用"$test" cool
[root@learnVM 桌面]# echo $test
i am is zzx cool
⑦、若该变量需要在其他子程序执行,则需要export来使变量编程环境变量:『 export 变量名 』
⑧、通常大写的变量是系统默认的变量,自定义的变量一般都为小写。(规则,不遵守也行)
⑨、取消变量的方法使用:unset
[root@learnVM 桌面]# unset test
[root@learnVM 桌面]# echo $test
<= 变量已被取消,输出的值为空
三、环境变量的功能
【1】用env观察环境变量与常见环境变量说明: 列出目前的shell环境下的所有环境变量与其内容。
[root@learnVM 桌面]# env
ORBIT_SOCKETDIR=/tmp/orbit-root
HOSTNAME=learnVM <=这部主机的主机名
IMSETTINGS_INTEGRATE_DESKTOP=yes
SHELL=/bin/bash <=目前这个环境下,使用的shell是哪一个程序
TERM=xterm <=这个终端机使用的环境是什么类型
HISTSIZE=1000 <=记录指令的笔数,默认支持1000
USER=root <=使用者的名称
......
env是environment(环境)的简写,如下部分环境变量。如果使用export也会是一样的内容。下面对环境变量进行介绍:
● HOME:代表用户的家目录。我们可以通过cd ~去家目录。有很多程序都可能会取用到这个变量的值。
● SHELL:当前使用的SHELL是哪只程序,Linux预设使用/bin/bash。
● MAIL:当我们使用mail这个指令在收信时,系统会去读取邮件邮箱文件(mailbox)。
● HISTSIZE:这个与『历史命令』有关,我们曾下达过的指令可以被系统记录下来,而记录的『笔数』则是由这个值来设定的。
● PATH:就是执行文件搜索的路径,目录与目录之间以冒号分割,由于文件的搜索是依序由PATH的变量内的目录来查询的,所以,目录的顺序也是很重要的。
● LANG:这个比较重要,很多讯息都会用到它,例如:当我们启动某些 Perl 的程序语言文件时,他会主动的去分析语系数据文件,如果发现他无法解析的编码语系,就可能产生错误。
● RANDOM:随机数的变量,目前大多数distributions都会有随机数生成器,那就是/dev/random文件,在BASH环境下,这个RANDOM变量的内容,介于0~32767之间。如果要去0~9之间的数值,利用declare宣告数值类型,如下:
[root@learnVM 桌面]# declare -i number=$RANDOM*10/32768;echo $number
2 <= 此时会随机取0~9之间的数值
【2】用set观察所有变量(含环境变量与自定义变量):bash可不只有环境变量,还有一些与bash操作接口有关的变量,以及用户自己定义的变量存在的。可通过set指令查看,set除了环境变量之外,还会将其他在bash内的变量统统显示出来。
[root@learnVM 桌面]# set
BASH

