Shell 的变数功能
在继续研究 BASH 之前,我们得要先就 变数 这个东西来讨论一番。 为什么要讨论变数呢?又,变数是啥玩意儿啊?!先来谈一谈国中数学好了,您是否依稀记得, 我们国中时候学过所谓的‘ y = ax + b ’这东西?其中, y 是变数, x 则是这个变数的内容啊! 讲的更简单一点,我们可以‘用一个简单的 "字眼" 来取代另一个比较复杂或者是容易变动的资料’。这有什么好处啊?最大的好处就是‘方便!’。
如果以 Linux 主机的运作来说明好了,因为在主机里面有太多的资料需要进行存取了, 而这些资料都是一些服务所必须的,例如某个名为 dmtsai 的帐号,他的 mail 的存取路径预设是在 /var/spool/mail/dmtsai 、家目录预设在 /home/dmtsai 等等。那如果换了另外一个帐号呢? 假设另一个帐号名称为 vbird ,你猜他的邮件与家目录在哪?应该是在 /var/spool/mail/vbird 与 /home/vbird 对吧! 那么我们主机的邮件服务是否要记录好几个不同的路径啊?会不会太麻烦?这当然很麻烦啰~ 所以为了简化整个运作流程,我们就可以透过某个变数功能,让这个变数可以依据不同的使用者而变更内容, 如此一来,系统的邮件服务只要依据那个变数去取得所需要的资料即可,就不需要记录不同的路径啰。
举例来说,我们每个帐号的邮件信箱预设是以 MAIL 这个变数来进行存取的, 当 dmtsai 这个使用者登入时,他便会取得 MAIL 这个变数,而这个变数的内容其实就是 /var/spool/mail/dmtsai, 那如果 vbird 登入呢?他取得的 MAIL 这个变数的内容其实就是 /var/spool/mail/vbird 。 而我们使用信件读取指令 mail 来读取自己的邮件信箱时,嘿嘿,这支程式可以直接读取 MAIL 这个变数的内容, 就能够自动的分辨出属于自己的信箱信件啰!这样一来,设计程式的设计师就真的很方便的啦!
当然我们可以改变这些个变数,但是如果该变数是直接深植于套件当中, 那么当你修改了某些参数之后,嘿嘿!你的套件就必须要‘由原始码直接更新再编译’ 才行!这样似乎很麻烦,所以啰,变数真的是很方便的啦!
Tips:
举个简单的例子来说, sendmail 的 smtp 存放 mail 路径是经由 /etc/profile 里头的:
MAIL="/var/spool/mail/$USER"
来设定的,而当我修改了上面这一个咚咚,然后重新开机之后,嘿嘿嘿嘿! 我的邮件就可以存放到不同的路径去了!而且不会有问题!可以顺利的‘在 Linux 主机上面’收发。然而问题发生在 pop3 这个服务上面,由于 pop3 的预设路径是在 source code 里头,而且就正是 /var/spool/mail 这个路径,也就是说,不论我怎么修正我的‘变数’, pop3 都不为所动!唉~真惨,所以就无法直接以 pop3 来收信了(例如 OutLook 就不能工作了)!会发生密码不接受的问题呢!
再来继续讲到其他的变数功能好了,我们前面已经提到过很多次,能不能执行某个指令, 与 PATH 这个变数也有很大的关系的。举例来说,我们在任何地方下达 ls 这个指令时,系统就是透过 PATH 这个变数里面的内容所记录的路径顺序来搜寻指令的呢!如果在搜寻完 PATH 变数内的路径还找不到 ls 这个指令时, 就会在萤幕上显示‘ command not found ’的错误讯息了。
这些还都只是系统预设的变数的目的,如果是个人的设定方面的应用呢:例如你要写一个大型的 script (批次档)时,有些资料因为可能由于使用者习惯的不同而有差异,比如说路径好了,由于该路径在 script 被使用在相当多的地方,如果下次换了一部主机,都要修改 script 里面的所有路径,那么我一定会疯掉! 这个时候如果使用变数,而将该变数的定义写在最前面,后面相关的路径名称都以变数来取代, 嘿嘿!那么你只要修改一行就等于修改整篇 script 了!方便的很!所以,良好的程式设计师都会善用变数的定义! ( 这个部分我们在后续的 shell script 再次提及的!)
如果说的学理一点,那么由于在 Linux System 下面,所有的执行续都是需要一个执行码, 而就如同上面提到的,你‘真正以 shell 来跟 Linux 沟通,是在正确的登入 Linux 之后!’这个时候你就有一个 bash 的执行程序,也才可以真正的经由 bash 来跟系统沟通啰!而在进入 shell 之前,也正如同上面提到的,由于系统需要一些变数来提供他资料的存取(或者是一些环境的设定参数值, 例如是否要显示彩色等等的),所以就有一些所谓的‘环境变数’ 需要来读入系统中了!这些环境变数例如 PATH、HOME、MAIL、SHELL 等等,都是很重要的, 为了区别与自订变数的不同,环境变数通常以大写字元来表示呢!
好了,那么我们就简单的来对‘什么是变数’作个简单的定义好了: ‘变数就是以一组文字或符号等,来取代一些设定或者是一串保留的资料!’, 例如:我设定了‘myname’就是‘VBird’,所以当你读取 myname 这个变数的时候,系统自然就会知道!哈!那就是 VBird 啦!最简单的例子可以取 PATH 来说明!如果你对于‘相对路径与绝对路径’还有点印象的话, 那么应该晓得‘要下达正确的指令,应该需要指定路径与档名’才行!例如你的 ls 指令应该需要以‘/bin/ls’来下达指令才对,那么为何你在任意的路径下都可以执行 ls 呢?而不需要指定路径呢?这是因为系统已经预设了一些‘搜寻路径(PATH)’了, 所以当你需要执行一些指令的时候,系统就会依照该 PATH 的设定来进行指令的搜寻!而这个 PATH 就是所谓的变数了!
那么如何‘显示变数’呢?这就需要使用到 echo 这个指令啦!
评论:bash是一个程序,有许多变量,有环境变量和自定义变量。变量决定着bash程序的初始化和运行操作。
阅读(554) | 评论(0) | 转发(0) |