日期:2014-05-16 浏览次数:20784 次
变量本质上是存储数据的一个或多个计算机内存地址。
变量可分为:本地变量,环境变量和位置参数。
本地变量是仅可以在用户当前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将反引号中的内容解释为系统命令 |
\ | 反斜线 | 转义符,屏蔽下一个字符的特殊意义 |
命令替换: