日期:2014-05-16  浏览次数:20784 次

linux初学习之-变量和引用

概念理解:

变量本质上是存储数据的一个或多个计算机内存地址。

变量可分为:本地变量,环境变量和位置参数。

本地变量是仅可以在用户当前shell生命期的脚本中使用的变量,本地变量随着shell进程的消亡而无效(比如说在当前shell中调用另一个shell,那么本地变量同样不能在被调用的shell中使用)。

环境变量则适用于所有由登录进程所产生的子进程(父进程中的环境变量在子进程中可以使用)。

位置参数也属于变量,它用于向shell脚本传递参数,是只读的。

 

变量替换和赋值:

变量是某个值的名称,引用变量值就称为变量替换,$符号是变量替换符号。

变量赋值的两种格式:

     1.   variable=value

     2.   ${variable=value}

     上述两行也是有区别的,比如在shell中1可以单独成行,2不能单独成行(2单独成行的话会被解释成一个命令,加入variable=1的话,会出现 1:command not found  错误)

变量替换的两种格式:

     1.   $variable

     2.   ${variable}

清除变量的值:unset  变量名

 

变量赋值的模式:P.130

bash shell不支持浮点型,只支持整形和字符型,默认情况下,shell脚本变量时字符型的,同时,字符型的变量还具有一个整型值,为0。如果变量中只含有数字,则为数值型,否则为字符串。

 

注意点( source  . ):

利用source命令执行脚本何在Shell中执行脚本是有区别的,source在当前bash环境下执行命令,而执行shell脚本是启动一个子Shell来执行命令。因此,如果在Shell中直接执行一个shell文件,新的环境变量只在子shell中生效,而无法在当前的shell中生效。如果使用source或.后新的环境变量在子shell和当前shell中都生效。

上面的注意点很重要,有时候会在shell编程中用到,如果子shell中有环境变量,父shell如果想利用子shell中的环境变量就要用到source或.    。

总结:

本地变量无法传递到子进程;环境变量对所有的子进程都有效;无论是本地变量还是环境变量都无法向其父进程传递(在子进程中对环境变量的更改在父进程中无效)。

 

 

$PPID与$$的区别:

$PPID代表执行该shell的父进程的进程号,$$代表执行该shell脚本的进程号。

 

位置参数:

位置参数用于从命令行向shell脚本传递参数,$1代表第一个参数,$0为脚本的名字

                                特殊位置参数及其意义

特殊位置参数 意义
$# 传递到脚本的参数数量
$*和$@ 传递到脚本的所有参数
$$ 脚本运行的进程号
$? 命令的退出状态,0表示没有错误,非0表示有错误

 

引用

引用指将字符串用引用符号引起来,以防止特殊字符被Shell脚本重解释为其他意义。

引用时屏蔽特殊字符的特殊意义,而将其解释为字面意义。也可以将引用理解为屏蔽。

                                    引用符号、名称及其意义

符号 名称 意义
" " 双引号 引用除美元符号($)、反引号(`)和反斜线(\)之外的所有字符
' ' 单引号 引用所有的字符
`` 反引号 Shell将反引号中的内容解释为系统命令
\ 反斜线 转义符,屏蔽下一个字符的特殊意义

 

命令替换: