码迷,mamicode.com
首页 > 系统相关 > 详细

SHELL脚本攻略(学习笔记)--1.4 变量(基础)

时间:2016-09-28 09:51:39      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

假设变量str,设置或修改变量属性时,不带$号,只有引用变量时才使用$号。也就是说变量是str,而不是$str。$只是操作变量时的一种符号形式,还有比如${}、${#} 、$(())等符号形式,它们分别代表不同的意思。这一点很容易搞错。

1.4.1 环境变量

环境变量就是运行在“环境”上下文的,在这个上下文都可以引用。例如常见的cd、ls等命令严格来说应该使用绝对路径如/bin/ls来执行,正是因为有了/bin目录加入了PATH环境变量,系统自己会去寻找PATH下的路径是否有该命令。

环境变量常用大写字母表示。常见的环境变量有HOSTNAME、SHELL、HISTSIZE、USER、PATH、PWD、LANG、HOME、LOGNAME。分别表示当前主机名、SHELL的路径即bash的类型、history保存多少记录、当前用户名、自动搜索路径、当前目录、使用的语系(临时修改语系时就改这个变量)、当前用户的家目录、当前登录的用户。

使用env可以查看当前用户的环境变量。

[root@xuexi ~]# echo $PATH  #查看PATH环境变量

/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

1.4.2 普通变量

脚本语言中,变量通常不需要特地声明,直接赋值使用即可。bash中,变量默认都是字符串类型,不论是否使用引号赋值,都以字符串方式存储。

变量赋值方式:str=value,等号左右没有空格。如果有空格就是进行比较运算符的比较运算了。

变量引用方式:$str或者${str},某些地方必须使用${str}的引用方式才行,例如在双引号里echo "the var is ${str}"。

[root@xuexi tmp]# str=Hello World!

[root@xuexi tmp]# echo "We will say ${str}"

We will say Hello World!  #注意到没,感叹号竟然输出来了。所以特殊符号在变量里不像echo一样有时会错误识别。

释放变量:unset str #没加前缀$。

[root@xuexi ~]# unset str

查看所有的临时变量:不接参数的set或者declare命令。

定义只读变量:readonly str。这时将无法修改变量值也无法unset变量,只能重新登录才删除变量。

临时将普通变量升级为环境变量:export str或者赋值时export str="value",这样$str就可以在当前shell和子shell中使用,但是退出脚本或者重新登录都会取消export效果。

[root@xuexi ~]# unset str;str=Hello World!;echo $str

Hello World!

[root@xuexi ~]# bash  #开启子shell

[root@xuexi ~]# echo ${str} #子shell中查看变量结果发现没有该变量。

                                               

在子shell中查看变量,结果竟然发现没有该变量。这是因为$str的作用域只在当前shell,要想在子shell中也能引用普通变量,则需要使用export升级为环境变量。

[root@xuexi ~]# exit   #退出子shell

exit

[root@xuexi ~]# export str #回到父shell升级该变量

[root@xuexi ~]# bash

[root@xuexi ~]# echo $str

Hello World!

1.4.3 修改变量的生命周期和作用域

普通的变量在脚本结束或退出登录后就失效,并且只对当前shell有效,其他用户和当前用户的子shell都无法使用。

使用export可以升级为临时局部的环境变量,对当前用户的当前shell和子shell有效,但其他用户无效,退出脚本和退出登录后也失效。

将变量写入/etc/profile文件可以让变量变成永久且全局。不仅变量,其他设置写入该文件也一样。该文件是每个用户登录前都会调用的文件,所以对所有用户永久有效。修改该文件后需要重启或者使用source /etc/profile来重新调用使之生效。

将变量写入对应用户的家目录下的.bash_profile即~/.bash_profile文件可以容变量变成永久但只对对应用户有效。不仅变量,其他设置也一样。该文件是每个用户登录后都会读取的自己家目录下的文件,所以只对对应用户有效,当然对对应子shell也有效。同样需要重启或者使用source ~/.bash_profile来重新调用使之生效。

关于bash的读取和调用流程,这里简单说明下:

登录linuxè读取/etc/profile-->读取对应用户的.bash_profile或.bash_login或.profile(优先度从前向后递减,之所以有这三种文件是不同Linux的转变保留)-->对应用户的.bashrc(因为由.bash_profile调用所以后执行,这个子shell会读取)-->/etc/bashrc-->.bash_logout(用于退出时执行的一些动作,执行完成后才完全退出)。

如果/etc/profile.d/目录下有.sh文件,则会在读取/etc/profile时调用它们,也会在读取/etc/bashrc的时候调用它们。

技术分享

1.4.4 获取变量的长度

在使用${}方式引用变量时,变量名前加上#就可以查看该变量的字符长度。空格也算入长度。例如:

[root@xuexi ~]# echo ${#str}

12

[root@xuexi ~]# echo ${#PATH}

92

1.4.5 declare声明变量

declare [+/-][选项] 变量名

选项:

-/+:给变量设定类型属性,取消给变量设定的类型属性

-i:声明为整型

-x:声明为环境变量

-p:显式指定变量被声明的类型

例如,声明一个环境变量declare -x str,取消该变量declare +x str。

SHELL脚本攻略(学习笔记)--1.4 变量(基础)

标签:

原文地址:http://www.cnblogs.com/f-ck-need-u/p/5915148.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!