您的位置:首页 > 运维架构 > Shell

shell之变量

2016-04-23 20:55 246 查看
这篇文章主要是介绍shell的变量。主要有:用户创建的变量、关键字变量和变量属性三个方面的内容。

对于变量,默认是常量为大写,变量为小写或者大小写命名。变量名必须是字母或者下划线开头,不能是数字开头。在Bourne Again Shell中变量赋值直接是等于号

eg myvar=a;

等号两边没有空格,在TC Shell中是 set myvar = a。

1:首先是用户创建的变量:

1.1:参数替换

$ person=max    #赋值

max                   #打印的内容

然后我们看看接下来的命令

$ echo $person          #打印person

max                             #打印的内容,下面同理,$是输入命令的一行

$ echo   "$person"

max

$ echo '$person'

$person          #打印的结果就是$person,没有替换

$ echo \$person

$person         #打印的结果就是$person,没有替换

从上面的例子可以看出,双引号对于参数而言没有啥影响,单引号和\ 可以阻止参数被替换。

虽然双引号不能阻止参数被替换,但是他仍然有作用。

$ person1="max and min"

$ person2=max and min

这两句话是不同的,前者打印person1是max and min ,后者打印就会出错,因为无法解析后面的空格!

双引号的第二个特点就是在路径名的展开中了

1.2:路径名的展开

假设当前路径下有maxmemo max.txt两个文件

eg

$ memo=max*

$ echo  $"memo"  #命令,有双引号,打印memo

max*                  #输出结果

$ echo $memo 

maxmemo max.txt  #输出的结果是进行了匹配的

可以看到,不加双引号对路径名字进行了匹配。

当然对于这个取变量的语法,其实最严格的用法应该是${memo},某些场合也许要用到这种形式。

1.3:unset删除变量

$ unset person #删除person变量

2:变量属性

2.1 readonly只读属性

$ readonly person #对已经有的person进行属性变更,此后person的值不能改变。

2.2 declare和typeset:为变量赋予属性

这两个是相同意思和用法的两个命令。承接的属性有

-a    声明一个数组

-f   声明一个函数名变量

-i   声明一个int型变量

-r   只读,类似于readonly

-x   输出变量,也可用export

eg:

$ declare person=max

$ declare -r person2=min  #声明只读的person2

$ declare -rx person3=nick    #等同于 declare -r -x person3=nick或者declare -x -r person3=nick

$ declare -x person4  #全局变量,初始不用赋值,为空,可用于所有shell

$ declare +x person3    #person3不在是全局变量,仍然只读,+可以删除属性

3:关键字变量(不做详细说明)

关键字变量可以继承,这里不做详细的说明,只是列出大类,提供整体框架。

HOME:用户主目录

PATH:shell查找程序的路径

MAIL:保存电子邮件的地方

PS1:用户主提示符,可以更改用户命令提示符,一般前面是$,root运行时是#,还可以自定义为其它的

PS2:用户辅助提示符

PS3:菜单提示符

PS4:调试提示符

IFS:分隔输入字段,默认是空格,制表符和换行符,通过IFS命令还可以扩展为其它的。比如 IFS=":"则,冒号也成为一个分隔符。

CDPATH:扩大cd的范围。

以上就是shell中的变量的知识点。最重要的是掌握用户变量和属性的用法。对于关键字变量,一般用不上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell linux 变量