Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4822240
  • 博文数量: 291
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 7924
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-06 14:28
个人简介

阿里巴巴是个快乐的青年

文章分类

全部博文(291)

文章存档

2018年(21)

2017年(4)

2016年(5)

2015年(17)

2014年(68)

2013年(174)

2012年(2)

分类: LINUX

2013-07-20 08:58:30

一、变量简介
        在shell里,使用变量之前不需要声明,只是简单地通过使用它来创建它(比如:给它赋初值)。默认情况下,变量被当做字符串并以字符串存储,哪怕你赋给它的是数值也是如此,这点不同于Lua等脚本。shell在需要时会将数值型字符串转换为对应的数值以对它进行操作。Linux是大小写敏感,那么shell会认为变量foo与Foo是不同的。
        在shell中,通过在变量名前加一个$符号来访问它的内容,但在为变量赋值时,只需要使用变量名即可。通常用echo $变量名来将其内容输出到终端上,比如:
        #var=hello
        #echo $var
        hello
        #var="hello world"
        #echo $var
        hello world
        #var=2+1
        #echo $var
        2+1
        需要注意的是:如果字符串里包含空格,必须用引号将其括起来,而且等号两边不能有空格。
        我们可以通过使用read命令来将用户的输入赋值给某个变量,这个命令需要一个变量名来作为参数,用于等待接收用户输入的数据,用户按下回车结束read命令,比如:
        #read var
        hello world
        #echo $var
        hello world
二、使用引号
        一般情况下,脚本文件中的参数以空白字符分割(空格、制表符或换行符),如果想在一个参数中包含一个或多个空白字符,就必须给参数加上引号。
        如果你把一个带有$字符的变量放在双引号中,程序执行时则会把变量替换为它的值;如果你把一个带有$字符的变量放在单引号中,程序执行时则不会发生替换现象;当然你也可以通过在字符$前加一个\字符来取消它的特殊含义,引号在变量输出中的作用请参看下面脚本:
        #!/bin/sh
        var = "hi there"
        echo $var
        echo "$var"
        echo '$var'
        echo \$var
        
        echo Enter some text
        read var
        
        echo '$var' now equals $var
        exit 0
        输出结果如下:
        hi there
        hi there
        $var
        $var
        Enter some text
        hello world       --控制台输入
        $var now equals hello world
        

三、环境变量
        当shell脚本执行时,一些变量会根据环境设置中的值进行初始化,这些变量称之为环境变量。环境变量一般都用大写字母命名,为了不产生冲突,那么用户在脚本中自定义变量时最好用小写字母命名。
        常用的环境变量有以下一些:
        $HOME:当前用户的主目录
        $PATH:以冒号分隔的用来搜索命令的目录列表
        $PS1:命令提示符,通常是$字符,但在bash中,你可以使用一些更复杂的值,比如:字符串[\u@\h\W]$就是一个流行的默认值,它给出用户名、机器名和当前目录名,当然也包括一个$提示符
        $PS2:二级提示符,用来提示后续的输入,通常是>字符
        $IFS:输入域分隔符,当shell读取输入时,用来分隔单词的一组字符,它们通常是空格、制表符和换行符
        $0:shell脚本的名字
        $#:传递给脚本的参数个数
        $$:shell脚本的进程号,脚本程序通常会用它来生成一个唯一的临时文件,比如:/tmp/tmpfile_$$
        可以通过export命令设置环境变量。

四、参数变量
        如果你的脚本程序在调用时带有参数,就会创建一些额外的变量。即使没有传递任何参数,环境变量$#也依然存在,只不过它的值是0而已。参数变量如下:
        $1,$2,...:脚本程序的参数
        $*:在一个变量中列出所有的参数,各个参数之间用环境变量IFS中的第一个字符分隔开,如果IFS为空时,各参数结合在一起
        $@:它是$*的一种精巧的变体,它不是用IFS环境变量,所以当IFS为空时,参数的值不会结合在一起
        具体如何运用,请参看如下:
        $IFS=''
        $set foo bar bam
        $echo "$@"
        foo bar bam
        $echo "$*"
        foobarbam
        $unset IFS
        $echo "$*"
        foo bar bam
        如你所见,双引号里面的$@把各个参数扩展为彼此分开的域,而不受IFS值的影响。一般来说,如果你想访问脚本程序的参数,用$@是明智的选择。

        

         
阅读(1464) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

scq2099yt2013-07-20 08:58:59

文明上网,理性发言...