shell的变量功能

   变量是shell中很重要的一个玩意,我们知道Linux是多用户、多任务环境,每个人登录系统时都能取得一个shell,每个人都能够使用bash执行mail这个命令来获取自己的邮件,问题是bash是如何得知你的邮件信箱是哪一个?这就需要变量这个玩意了。

1、什么是变量?

   简单的说变量就是用一串字符来表示一个未知或者变化的内容。举个例子大家来理解下变量,当一个环境中有两个人tom和jack两个人时,tom说:“我怎么怎么样,你....”jack说:“我怎么怎么样,你怎么怎么样”,在他们两个人的对话中“我”“你”就是两个变量,大家想想tom说你我的时候,我=tom,你=jack,相反jack说你我的时候我=jack,你=tom,现在大家明白变量是怎么回事了么?变量几个特性:

  • 变量的可变性和方便性:举例来说明,我们每个账号都有自己的邮箱默认是以MAIL这个变量来进行访问的,当a这个用户登录时就会取得MAIL这个变量,而这个变量的内容就是/var/spool/mail/a,如果是b登录时MAIL这个变量的内容就是/var/spool/mail/b,而我们使用mail这个命令来读取自己的邮箱时,这个程序会自动调用MAIL这个变量,就能够自动的分辨属于自己的邮箱了,这样一来程序员就轻松了许多。我们来仔细思考一下这个例子的运作过程,当我们在登录Linux时输入用户名和密码后,系统自动的已经将/var/spool/mail这个文件内容改为/var/spool/mail/账户名,当其他用户登录时按下enter键的一瞬间mail这个文件内容就已经发生变化了,这就是变量的好处。这里我们需要注意小写的mail是命令,大写的MAIL是变量名称

  • 影响bash环境的变量:某些特定变量会影响环境,举例说明我们前面一直提到很多次的PATH变量,你能不能在任何环境下执行一些命令与这个PATH变量有着很大关系。例如你执行ls这个命令时,系统就通过PATH这变量里面记录的路径顺序来查找命令,如果在查找完还是找不到系统会提示你“command not fount”再说的清楚些,由于在Linux下,所有的执行都需要执行码,而就如同上面提到的,真正以shell来和Linux通信是在正确登录Linux后,你会有一个bash执行程序,也就是这个bash来跟Linux通讯,在你登录Linux之前需要一些变量来提供它数据的访问,这些变量就是环境变量比如:PATH,HOME,MAIL,SHELL等,为了区别环境变量与其他变量的不同我们一般为大写的。

  • 变量作为脚本程序的好帮手:我们还是举例说明当我们写了一个大型的script时,有些数据可能因为用户使用习惯的不同,比如说路径好了,由于该路径在script被使用地方相当的多,如果下次我们换一台机子的时候,都要修改这些路径会显得特别麻烦,这个时候我们通常会利用变量来使script里的所有路径都改变。

2、变量的显示与设置

   我们认识变量以后,我该知道变量是什么样子的,这个时候我们使用echo这个命令来显示变量的内容。echo ${变量}比如我们在系统上输入echo $PATH,当然echo功能不仅仅是显示变量的内容,具体你可以使用man echo来查看。

3、变量的设置规则

  • 变量与变量的内容以一个等号“=”来连接如下所示:myname=dashu

  • 等号两边不能直接接空

  • 变量名称只能是英文字母和数字,但是开头不能为数字

  • 变量的内容如果含有空格可使用“”‘’括起来,但是注意双引号内地特殊字符$等可以保有原来的特性,单引号内地特殊字符代表一般字符

  • 转义字符\可以将一些特殊的字符变为一般的字符比如$、enter、\、空格、!等

  • 如变量内容中含有其他需要其他命令提供的信息可以使用$(命令)或者`命令`

  • 如果为了增加变量的内容可以使用"$"或者${}

  • 如果变量需要在子环境下使用可以使用export

  • 一般情况下我们的大写字符变量为系统默认的变量,自己命名的变量为小写字符

取消变量的命名我们使用的是unset

4、环境变量的功能

   用env查看环境变量与常见的环境说明:env是environment的缩写功能是列出所有环境变量。当然如果使用export也会是一样的内容,只不过export还有其他额外的功能,我们看看这些变量有什么功能。

  • HOME代表用户的主文件,还记得我们可以使用cd去到自己的主文件夹么?

  • SHELL它告知我们目前这个环境使用的shell是哪个程序?Linux使用的是/bin/bash

  • HISTSIZE历史大小,这个变量定义了我们历史命令条数保存的多少

  • MAIL当我们使用mail这个命令来查收我们的邮件时会去读取的邮件箱文件

  • PATH执行文件的查找路径,目录与目录之间用;号来隔开

  • LANG语言变量,我们的中文编码一般是zh_CN.gb2321和utf-8

RANDOM随机数的变量

5、用set查看变量

   bash可不只是有环境变量,还有一些操作和接口有关的变量,以及用户自己定义的变量。set除了环境变量之外,还会将bash内的其他变量全部显示出来。

   PS1提示符的设置(未完待续——)