变量

变量

    在shell脚本中,单独的字符或者命令只能引用一次,对于变量,我们可以多次引用,且对变量的赋值修改方便。对于一条很长的命令或者频繁使用的路径等,我们可以赋值给一个变量,比如获得系统中所有用户的uid,要输入很长的一段命令,我们如果每次使用都输入命令是件很麻烦的事情,如果赋值变量,那么就会很方便。设置变量useruid

    useruid= `cat /etc/passwd|cut -d: -f3|sort -n`使用时直接echo “$useruid”,超级方便,接下来具体介绍一下变量,今天具体介绍一下本地变量和环境变量


目  录

1、变量的命名法则

2、变量类型

3bash变量种类

4、本地变量

5、环境变量


1、变量的命名规则

1)不能使程序中的保留字:例如if, for

2)只能使用字母、数字及下划线,且不能以数字开头

3)见名知义

4)统一命名规则:驼峰命名法

2变量类型:

        wKiom1mGykOS2ouNAABHp7SeMxk473.png

3、bash变量种类

根据变量的生效范围等标准可分为。

  (1)本地变量:生效范围为当前shell进程;对当前shell之外的其它shell进程,包括当前shell    的子shell进程均无效

         当我们进入linux下,会自动进入一个bash ,在本地声明的变量,只能在当前bash下使用,        再进入子bash中,便不能使用了称为本地变量

         SHLVL: 显示当前SHELL是几级bash  用法:echo $SHLVL

         pstree 显示进程树

                                          -p 同时显示进程的PID

                 $:显示当前的PID   (运用为 echo $$)

   wKioL1mHGCqT52fsAAAnPGweIS4074.png

   wKiom1mHGOWgsk8DAAAja6_6nx0151.png

   可以看出本地变量仅对当前shell有效,当前shell的子shell进程

      接下来我们看一下对同级的shell是否有效。              

wKiom1mHHFPjdfklAABJV3UcHZs071.png

 wKioL1mHHGPTml8rAAAYgXBae_I861.png

     可以看出本地声明的变量对同级的bash下也不能使用 

    总结:对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效

  (2)环境变量:生效范围为当前shell进程及其子进程,父进程什么情况都无效

 wKioL1mHHjLRRnb5AABqC_rTQFE356.png

  结论:环境变量仅对其子shell有效,对父shell无效。        

wKioL1mHIRixVUmuAABVj59B8H4013.png

 wKioL1mHISiC-EYtAAAVYzdk8ME995.png

       结论:环境变量仅对其子shell有效,对其他无效。

  (3)局部变量:生效范围为当前shell进程中某代码片断(通常指函数)

  (4)位置变量: $1, $2, …来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数

  (5)特殊变量: $?, $0, $*, $@, $#,$$

 

4、本地变量

1)变量的赋值

   单独一个无值变量的意义不大,对于一个变量,往往是先赋值后引用

    varname=’value’

   wKiom1mG37zgyp2KAAAX-cYW7xs350.png       

    可以使用引用value:

 (1) 可以是直接字串; A=”hello Hi”

 wKioL1mG4cDjCiWMAAAbg4McJg0163.png

 (2) 变量引用: A=”$USER”

 wKiom1mG4wCjVDVIAAAcq7OhVu4429.png

  USER 是bash的内部变量,表示当前用户 

 (3) 命令引用: A=`COMMAND` varname=$(COMMAND)

     useruid= `cat /etc/passwd|cut -d: -f3|sort -n`

wKioL1mG5ejzZ-hgAAAtVe2bHvw228.png

对于变量的赋值大家可能很清楚,但是对于变量的引用,为什么有时加双引号,有时不加引号,接下来具体讲一下变量的引用

2)变量的引用

         变量的引用主要用$

  (1) $varname

         主要在数字和一般字符串

   (2)”$varname”   可以确定界限

   (3) ${varname}   可以确定界限        

    当变量值当中包含换行符,如果希望引用出的值同样包含换行符,只能使用”$varname”

    就像上面的useruid一样,由于获得的用户UID中每行都含有换行符,所以必须用””,如果不用         就会出现下列情况

wKioL1mG6JGh98b4AAAkaWAKUAE758.png

  所有UID排成的一行,因为不识别换行符,所以一定要使用”” ,才可以获得自己所需的信息

(4)特殊情况:

   “”:弱引用,其中的变量引用会被替换为变量值  

   ”:强引用,其中的变量引用不会被替换为变量值,而保持原字符串

      例如将A=abc  ,当引用A是我们比较一下

wKiom1mG-OOR6kcNAAAy-UAsVss195.png    

 所以当在使用引号时,要注意自己是否引用了变量等

 例如在使用一些特殊字符时,双引号就不可以实现

 wKiom1mG-vniYDwqAABGEPMSHxI724.png

总结:

     \ 完全转译  

     ” 完全转译

     “”部分转译,对于这四种不能转移 斜杠\ 反引号`  叹号! $不能转双引号不能用,大家可        以尝试一下,之后我会写一篇博客专门介绍

3)变量的查看

           set 既显示本地变量也显示环境变量

      wKioL1mHDHjQ1qMJAABNmY1P_pg988.png

5、环境变量

1)变量的赋值

              (1) vaname=123

                        export varname 

       wKiom1mHD1PAvfpHAAAmDCbSges967.png


       wKiom1mHDtziSHtSAAA0MYXCofE298.png

2)export varname=value

可以直接给便量赋值

wKioL1mHD8SijxnwAAAnFDvzkrg427.png

(3)declare -x varname=value

wKioL1mHEIbz2HHJAAAxVrgAtZQ665.png 

2)变量的引用

               同本地变量的用法一样

3)变量的查看  

     (1) set 可以查看本地变量和环境变量         

     (2)env    

             (3)printenv 

              在上面的已经看到了env的作用,看一下printenv ,这两种的用法一样

       wKioL1mHElGD485AAAAlk0MLD-c955.png

                              (4)export  

                               wKioL1mHE9_gVMK2AAA4V_eGJSg647.png

                             (5) declare –x   

                               wKiom1mHE_-j0JZjAABQhyhsJjo536.png     

                                 比较四种用法:

                              wKiom1mHEyLSLHFMAAAidYSj4YU001.png       

       总结:可以看出env 和printenv显示的结果一样,export 和 declare -x 显示结果一样 ,四种结果都会显示出环境变量的数量一样。可以随意选择其中一种使用

4)变量的销毁

           环境变量和本地变量的销毁方式一样,unset varname

            wKioL1mHFVWC_4RBAAApFyl2Obg615.png

          在平时的使用变量时,或者在写脚本时,随手写一个命令,释放A变量。毕竟变量的设置也会占用内存,积少成多。

 

原创文章,作者:guanman,如若转载,请注明出处:http://www.178linux.com/84077

(0)
上一篇 2017-08-06 22:13
下一篇 2017-08-06 22:14

相关推荐

  • linux 学习(2)

    1 linux 常见的文件管理命令都有哪些?其常用的使用方法。 ls 文件列出命令   常见选项  -l 显示长文本信息          -d 显示当前目录信息          -a 显示所有文件信息     &nb…

    Linux干货 2016-10-09
  • Shell脚本编程基础

    1编程基础 程序:指令+数据 程序编程分格: 过程式:以指令为中心,数据服务于指令 对象式:以数据为中心,指令服务于数据 Shell程序:提供了编程能力,解释执行 程序的执行方式 计算机:运行二进制指令 编程语言: 低级:汇编 高级:编译:高级语言->编译器->目标代码 编译性语言编写的程序通常是需要通过编译器去转换成计算机可以识别的二进制文件,…

    2017-11-27
  • CentOS 7源码安装httpd服务

    httpd的简介     httpd是一个开源软件,且一般用作web服务器来使用。目前最流行的web服务器软件叫做httpd,httpd还有一个俗称叫apache,Apache是一个软件基金会,httpd也是这个软件基金会的一个项目。在早期的http server就叫做apache,到了http server 2.0以…

    Linux干货 2016-08-24
  • linux基础学习-网络基础

    一、OSI七层模型 二、TCP/IP模型         三次握手原理 三、常见服务的默认端口 四、IP地址、子网划分基础知识     通信原理:一般数据的交互产生是在应用层(TCP/IP模型),应用层以下可以看成是搬运工,不同层的协议定义了不同的搬运工的工作内容,直到最后,把数…

    Linux干货 2016-09-05
  • 浅谈Nginx(二)—http下server配置

    浅谈Nginx(二)—http下server配置 此文介绍Nginx下的http模块,着重介绍http模块下的server服务 ——–依据”马哥教育”主讲人马永亮导师的上课笔记整理——- 目录  一. http相关的基本配置:     1)…

    系统运维 2017-02-07
  • 第一篇博客

    我的第一篇博客以及接下来的每一篇都要献给linux运维了。第一次接触linux是在大三的时候,当时并没有想到以后还会和linux邂逅并以此谋生。 首先就从最基础的linux分区与挂载点开始了解介绍,我们熟悉的Windows系统下的分区都分配有盘符,像c盘,d盘之类的,用来存放各种软件和文件。而linux也有自己的分区,并将分区挂载到不同的挂载点上,挂载是指将…

    2017-07-16