Shell 的变量功能

    什么是『变量』呢?简单的说,就是让某一个特定字符串代表不固定的内容就是了。举个大家在国中都会学到的数学例子, 那就是:『 y = ax + b 』这东西,在等号左边的(y)就是变量,在等号右边的(ax+b)就是变量内容。 要注意的是,左边是未知数,右边是已知数喔! 讲的更简单一点,我们可以『用一个简单的 "字眼" 来取代另一个比较复杂或者是容易变动的数据』。最大的好处就是『方便!』。

变量的取用与设定:echo, 变量设定规则, unset

    可以利用 echo 这个指令来取用(查看)变量, 但是,变量在被取用时,前面必须要加上钱字号『 $ 』才行,举例来说,要知道 PATH 的内容

linux-peej:~ # echo $PATH
/sbin:/usr/sbin:/usr/local/sbin:/root/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/usr/lib/mit/bin:/usr/lib/mit/sbin

变量的取用就如同上面的范例,利用 ehco 就能够读出,只是需要在变量名称前面加上 $ , 或者是以 ${变量} 的方式来取用都可以!当然啦,那个 echo 的功能可是很多的, 我这里单纯是拿 echo 来读出变量的内容而已。

    现在我们知道了变量与变量内容之间的相关性,那么我要如何『设定』或者是『修改』 某个变量的内容呢?用『等号(=)』连接变量与他的内容即可!举例来说: 我要将 myname 这个变量名称的内容设定为 Qiuwanxiao,那么:
[root@www ~]# echo $myname                       <==这里幵没有任何数据~因为这个变量尚未被设定!是空的!

[root@www ~]# myname=Qiuwanxiao 
[root@www ~]# echo ${myname} 
Qiuwanxiao                                                          <==出现了!因为这个变量已经被设定了!
如此一来,这个变量名称 myname 的内容就带有 Qiuwanxiao这个数据啰~ 而由上面的例子当中,我们也可以知道: 在 bash 当中,当一个变量名称尚未被设定时,预设的内容是『空』的。 另外,变量在设定时,还是需要符合某些规定的,否则会设定失败! 

变量的设定规则

1. 变量与变量内容以一个等号『=』来连结,如: 『myname=Qiuwanxiao』
2. 等号两边不能直接接空格符,如下所示为错误: 『myname = Qiuwanxiao』或『myname=Qiuwanxiao Tsai』
3. 变量名称只能是英文字母与数字,但是开头字符不能是数字,如下为错误: 『2myname=Qiuwanxiao』
4. 变量内容若有空格符可使用双引号『"』或单引号『'』将变量内容结合起来,但
                          o 双引号内的特殊字符如 $ 等,可以保有原本的特性,如下所示: 『var="lang is $LANG"』则『echo $var』可得『lang is en_US』 如下(我在自己的主机):
                            linux-peej:~ # echo $LANG
                            POSIX
                            linux-peej:~ # var="lang is $LANG"
                            linux-peej:~ # echo $var
                            lang is POSIX 
                          o 单引号内的特殊字符则仅为一般字符 (纯文本),如下所示: 『var='lang is $LANG'』则『echo $var』可得『lang is $LANG』
                            linux-peej:~ # var='lang is $LANG'
                            linux-peej:~ # echo $var
                            lang is $LANG
5. 可用跳脱字符『 \ 』将特殊符号(如 [Enter], $, \, 空格符, '等)变成一般字符;
6. 在一串指令中,还需要藉由其他的指令提供的信息,可以使用反单引号『`指令`』或 『$(指令)』。特别注意,那个 ` 是键盘上方的数字键 1 左边那个按键,而不是单引号! 例如想要取得核心版本的设定: 『version=$(uname -r)』再『echo $version』可得『2.6.27.19-5-default』
7. 若该变量为扩增变量内容时,则可用 "$变量名称" 或 ${变量} 累加内容,如下所示: 『PATH="$PATH":/home/bin』
8. 若该变量需要在其他子程序执行,则需要以 export 来使变量变成环境变量: 『export PATH』
9. 通常大写字符为系统默认变量,自行设定变量可以使用小写字符,方便判断 (纯粹依照使用者兴趣与嗜好) ;
10.取消变量的方法为使用 unset :『unset 变量名称』例如取消 myname 的设定: 『unset myname』

环境变量的功能: env 与常见环境变量说明, set, export

**用 env 或 export 观察环境变量与常见环境变量说明 

    环境变量可以帮我们达到很多功能~包括家目录的变换啊、提示字符的显示啊、执行文件搜寻的路径啊等等, 目前我的 shell 环境中, 有多少默认的环境变量啊?我们可以利用两个指令来查阅,分别是envexport

linux-peej:~ # env
LESSKEY=/etc/lesskey.bin
NNTPSERVER=news
......省略......

env 是 environment (环境) 的简写啊,上面的例子当中,是列出来所有的环境变量。当然,如果使用 export 也会是一样的内容, 只不过, export 还有其他额外的功能就是了,如:

linux-peej:~ # export
declare -x COLORTERM="1"
declare -x CPU="x86_64"
declare -x CSHEDIT="emacs"
declare -x CVS_RSH="ssh"
......省略......

**用 set 观察所有变量 (含环境变量与自定义变量)

bash 可不只有环境变量喔,还有一些与 bash 操作接口有关的变量,以及用户自己定义的变量存在的。 那么这些变量如何观察呢?这个时候就得要使用 set 这个指令了。 set 除了环境变量之外, 还会将其他在 bash 内的变量通通显示出来哩!信息很多,以下不一一列出了:

linux-peej:~ # set


export: 自定义变量转成环境变量

    谈了 env 与 set 现在知道所谓的环境变量与自定义变量,那么这两者之间有啥差异呢?其实这两者的差异在于『 该变量是否会被子程序所继续引用』了!那么啥是父程序?子程序? 这就得要了解一下指令的下达行为了。 当你登入 Linux 并取得一个 bash 之后,你的 bash 就是一个独立的程序,被称为 PID 。 接下来你在这个 bash 底下所下达的任何指令都是由这个 bash 所衍生出来的,那些被下达的指令就被称为子程序了。我们在原本的 bash 底下执行另一个 bash ,结果操作的环境接口会跑到第二个 bash 去(就是子程序), 那原本的 bash 就会在暂停的情况 (睡着了,就是 sleep)。整个指令运作的环境是实线的部分!若要回到原本的 bash 去, 就叧有将第二个 bash 结束掉 (下达 exit 或 logout) 才行。 这个程序概念与变量有啥关系啊?关系可大了!因为子程序仅会继承父程序的环境变量, 子程序不会继承父程序的自定义变量啦!所以你在原本 bash 的自定义变量在进入了子程序后就会消失不见, 一直到你离开子程序幵回到原本的父程序后,这个变量才会又出现! 如想要让该变量内容继续的在子程序中使用,需要执行: 
[root@www ~]# export 变量名称
  
    那如何将环境变量转成自定义变量呢? declare 

[root@www ~]# declare +x 变量名称(环境变量)                                        <==将 - 变成 + 可以进行『取消』动作


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值