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

《Linux Shell》之五:变量和引用

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

变量分为:本地变量、环境变量、位置参数。其中位置参数用于向shell脚本传递参数,是只读的。

unset var可将var变量清除掉

变量赋值两种特殊情形,使用的时候一定要用$符号和大括号括起来:

${variable:=value} ?--> 对未赋值的variable,将value值赋给它

${variable:-value} ? --> 对未赋值的variable,将value值赋给它,但value值不存储到variable对应的地址空间

${variable?value}用来测试变量是否被赋值

# readonly variable ?--> 设置变量为只读的

?

6.1.2 无类型的Shell脚本变量

Shell脚本变量是无类型的,这与awk变量是一样的。

Bash不支持浮点型,只支持整形和字符型,默认情况下,bash脚本变量是字符型的,同时,字符型变量还有个整形值0.也就是说你拿字符型变量做数值运算,它的值其实是0

?

对于空字符串和未定义变量处理方式,shell变量默认就是字符型的,字符型的初始值为空,而且可以不预先定义变量而直接使用它,跟初始化定义它为""效果是一样的。

?

?>>几个环境变量配置文件

由于Linux环境变量数量较多,因此系统管理员不会利用export逐个设置环境变量,而是将export命令放置在特殊的配置文件中,Shell能够在开机的时候自动执行这些配置文件。

.bash_profile:

最最重要的配置文件,当某linux用户登录时,shell会自动执行.bash_profile文件,如果.bash_profile文件不存在,则自动执行系统默认的配置文件/etc/profile

修改此配置文件后要立即生效,请使用 source 或. ?命令

.bashrc:

如果用户由当前shell创建一个新的子shell,子shell会尝试读取.bashrc中命令以设置环境变量。.bashrc使得用户登录时的环境变量与子shell环境变量相分离。

.bash_logout:

.bash_logout文件在用户注销时执行

?

6.1.4 位置参数

位置参数 positional parameters是一种特殊shell变量,用于从命令行向shell脚本传递参数,$1表示第1个参数、$2表示第2个参数等。$0表示脚本名称(带路径) ,$* 或 $@表示从$1开始的全部参数列表

-----------------特殊变量-----------------------

$# ?传递到脚本的参数数量

$*或$@ 传递到脚本的所有参数

$$ ?脚本运行的进程号

$? 命令的退出状态,0表示没有错误,非0表示有错误

?

引用符号及其意义:

"" ?引用除$、反引号、反斜杠\之外的所有字符

'' ? 引用所有的字符

反引号 ?shell将反引号中内容解释为系统命令

\ ? ?转义符,屏蔽下一个字符的特殊意义

?

6.2.3 ?转义字符

特殊字符及其意义

特殊字符 意义
& 传递到脚本的参数数量
* 0个或多个在*字符前的那个普通字符
+ 匹配1个或多个在其之前的普通字符
^ 匹配行首,或后面字符的非
$ 命令退出状态,0表示没错误,非0...
` 反引号,shell引用符号,解析命令
" 双引用,shell引用符号
| 管道符号或表示“或”意义
? 匹配0个或1个其前的普通字符
\ 转义符本身

?

转义符后跟字母表示的特殊意义:

符号 意义
\n 换行
\r 回车
\t Tab键
\v或\f 换行但光标停留在原来位置
\b Backspace键
\a 警报声
\0xx ASCII码0xx对应字符

?

# echo $'\t\thello'

使用$' '后,单引号里面的转义加特殊字母就可以解析成特殊意义了。

其他情况下就是原始值了。

?

?