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