SHELL变量及环境

用户自定义变量:

1.定义SHELL变量:SHELL支持字符串值的变量,SHELL变量不需要提前定义或初始化,没有初始化的SHELL变量被当做空字符串。大家通常通过复制对变量进行说明和初始化,还可以对变量多次赋值,改变变量的值。

      变量赋值的格式是: name=string

      name是变量的名字,它是下划线或字母开头的下划线字母和数字组成的字符串,为了统一格式我们一般把自定义变量用小写表示。=是赋值号,=两边不能有空格,否则SHELL把它当做命令执行。string是变量的值,如果string带有空格、制表符或者换行符,必须用‘’或者“”包起来,“”中间可以变量替换,‘’不能进行变量替换。

      变量赋值举例:

     $ var1=string1

     $ var2=string2 

    变量的值都是数字的时候才允许进行数字计算。在新版的bash中可以使用declare 、typeset命令声明变量及属性,但是为了保证shell不同版本的兼容,不是必要的情况下不要对变量进行声明。

2.变量替换和输出:在name前面加上$符号进行变量替换,就是用$name替换出变量的值,即用string代替$name。字符串连接的时候为了区分出变量名防止混淆可以使用${name}的形式。

      输出变量可以使用内置命令echo或者printf

      定义和使用变量举例:

      v1=dog

      $ echo I love $v1

      $ I love dog

      //显示常量

      $ echo I love you

      $ I love you

      $ echo 'I love you'

      $I love you

      $ echo "I love you"

      $I love you

      //上面的几个例子由于字符串中间没有特殊字符所以使用'' 和 ""的效果是一样的。

      $ echo I'd like dog

      >

      //由于字符串中带有特殊字符' 所以SHELL认为没有对应的'匹配,命令没有输出完全回车后继续输入命令,如果想结束可以使用<ctrl>+c 命令结束。

      //如果想输出特殊字符可以使用转义字符/

      $ echo I/'d like dog

      $I'd like dog

 

      //定义变量

      $ v1=centos

      $ echo $v1

      $ centos

      //变量赋值的时候如果有空格用''括起来

      $ v1='centos 5'

      $ echo I love $v1

      $ I love centos 5

      例子就举到这,大家可以勤加练习来领悟这些内容。下面来说说SHELL变量的作用域

SHELL变量作用域:

SHELL变量有自己的作用域,变量分为局部变量和全局变量,默认情况下所有用户自定义变量都是局部变量,所有环境变量都是全局变量。

      局部变量的作用域仅仅是命令行所在的SHELL和当前SHELL运行的过程中。

      全局变量的作用域是定义这个变量的SHELL及其所有子孙SHELL。

      要定义全局变量可以使用export命令,下面我们来举例:

      把多个局部变量变为全局变量:

      export var1 var2 var3

      把多个全局变量变为局部变量:

      export -n var1 var2 var3

      一次性给多个全局变量赋值:

      export var1=string1 var2=string2 var3=string3

      下面我们来对变量作用域来举个例子:

      //这里分别设置局部变量var1和var2

      $ var1=1

      $ var2=2

      //这里把局部变量var2变为全局变量

      $ export var2

      //下面设置全局变量var3和var4

      $ export var3=3 var4=4

      //在当前SHELL输出一个var1 var2 var3 var4

      $ echo var1 var2 var3 var4

      $ 1 2 3 4

      //这里我们进入子SHELL看看四个变量的变化

      //这里我们输出var1不会得到任何内容,因为var1是局部变量,所以进入子SHELL以后不会再有值

      $ bash

      $ echo var1

      //我们再输出var2 var3 var4的值看看

      $ echo var2 var3 var4

      $ 2 3 4

      //这里把var2变成局部变量

      $ export -n var2

      //输出var2

      $ echo var2

      $ 2

      //进入孙SHELL

      $ bash

      //输出var2,会发现没有结果

      $ echo var2

      $ 

      //输出 var3 var4,会得到结果,因为他们依然是全局变量

      $ echo var3 var4

      $ 3 4

      //返回父SHELL

      $ exit

      //显示变量var2 var3 var4的值

      $ echo var2 var3 var4

      $ 2 3 4

      //改变var2 的值

      $ var2=22

      $ echo var2 var3 var4

      $ 22 3 4

      //返回父SHELL

      $  exit

      //再输出var2看看,发现刚才修改的var2值没有变化,子SHELL中变量修改不会回传给父SHELL

      $  echo var2 

      $ 2

环境变量:

      环境变量用来定义SHELL环境,保证SHELL命令正常执行。SHELL会用环境变量来进行各种定位或者身份认证,环境变量都是全局变量(可以传递给子孙SHELL),子SHELL对环境变量的修改不影响父SHELL。

      下面介绍一下常用的环境变量:

      BASH            bash的完整路径

      HOME           用户的主目录

      HISTFILE       保存历史命令的文件

      HISTSIZE       保存历史命令的大小

      oldpwd          上一个工作目录

      pwd               当前工作目录

      USER             当前用户名

      UID                当前用户ID

 

用户工作环境设置:

      我们登陆系统的时候系统会给我们分配一个工作环境,不需要用户每次登陆都自行进行设置。每个用户都有一个自己的工作环境,每个人的工作环境之间都很相似,但又各有不同。就像办公楼里面每个人都会有自己的工作环境,办公楼里的温度灯光等条件都是相似的,但是每个人的办公间又会有不同,比如文员的办公间可能会有打印机,安保部门的办公环境就没有打印机。

      SHELL的工作环境设置分为系统工作环境和用户设置的用户工作环境,设置系统工作环境会使所有登陆的用户都生效,设置用户设置的工作环境只对设置的用户生效。

      用户工作环境又分为登陆环境和非登陆环境,登陆环境是用户登陆以后的SHELL环境,非登录环境是用户进入子SHELL的情况。

      下面介绍一下各个情况下的环境文件。

      系统工作环境设置文件:

      登录环境:/etc/profile

      非登录环境:/etc/bashrc

      用户设置的工作环境文件:

      登录环境:$HOME/.profile

      非登录环境:$HOME/.bashrc

你可能感兴趣的:(shell,变量)