shell脚本之shell内部变量和环境变量

这篇博客介绍:

1、部分常用的内部变量

2、环境变量


变量的分类可以参考:点击打开链接

1、部分常用的内部变量:

    ⑴ #

        说明:$#变量是命令行参数或位置参数的数量

    ⑵ -

        说明:$-变量是传递给shell脚本的执行标志

    ⑶ ?

        说明:$? 变量是最近一次执行的命令或shell脚本的出口状态

    ⑷ $

        说明:$$ 变量是shell脚本里面的进程ID。Shell脚本经常使用 $$ 变量组织临时文件名,确保文件名的唯一性。

    ⑸ _

        说明:$_ 变量是一个特殊的变量,在shell开始运行时,变量的初始值为shell或其执行的shell脚本的绝对路径名,之后就是最近执行的命令的最后一个选项或参数等。

    ⑹ !

        说明:&! 变量的值是最近运行的一个后台进程PID

    ⑺ *

        说明:$* 变量的值表示所有的位置参数,其值是所有位置参数的值。

    ⑻ @

        说明:[email protected] 变量的值类似于$*,表示所有的位置参数,其值也是所有位置参数的值。

    ⑼ LINENO

        调测用。用于显示脚本中当前执行的命令的行号。

    ⑽ OLDPWD

        利用cd命令改换到新目录之前所在的工作目录。

        用法:cd $OLDPWD  (切换到之前的工作目录,和cd - 功能一样)

        注意1:变量用$引用,注意2:linux下区分大小写

    ⑾ OPTARG

        getopts命令已经处理的前一个选项参数

        getopts命令见Shell内部命令

    ⑿ OPTIND

    ⒀ PPID

        是当前进程的父进程的PID

    ⒁ PWD

        当前工作目录。

        注意:这是一个变量,变量值等同于命令pwd的输出

    ⒂ RANDOM

        随机数变量。每次引用这个变量会得到一个0~32767的随机数。

    ⒃ REPLY

        read命令,如果没有被指定变量。即通过read读入的数据,如果没有对应的变量进行赋值,则可以把REPLY变量用作read命令的默认变量,接收read命令读入的参数。

    ⒄ SECONDS

        脚本已经运行的时间(以秒为单位)


2、环境变量 

转自:点击打开链接

⑴ 简介:

    环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或多个应用程序将使用到的信息。Linux是一个多用户的操作系统,每个用户登录系统时都会有一个专用的运行环境,通常情况下每个用户的默认的环境都是相同的。这个默认环境就是一组环境变量的定义。每个用户都可以通过修改环境变量的方式对自己的运行环境进行配置。

      变量分类可以参考:点击打开链接

⑵ 分类:

    根据环境变量的生命周期我们可以将其分为永久性环境变量和临时性变量;根据用户等级的不同又可以将其分为系统级变量和用户级变量。

            以下的三种环境变量:所有用户可使用的环境变量、特定用户可使用的环境变量、临时环境变量

            这三种环境变量的设置,只是在不同的地方进行设置,所以作用范围不一样。

        ① 对所有用户生效的永久性变量(系统级)

    这类变量对系统内的所有用户都生效,所有用户都可以使用这类变量。作用范围是整个系统。 
    设置方式: vim在/etc/profile文件中添加我们想要的环境变量。 
    当然,这个文件只有在root(超级用户)下才能修改。我们可以在etc目录下使用ls -l查看这个文件的用户及权限。 

    利用vim打开/etc/ profile文件,用export指令添加环境变量。 

    【注意】:添加完成后新的环境变量不会立即生效,除非你调用source /etc/profile 该文件才会生效。否则只能在下次重进此用户时才能生效。

        使用演示:

        第一步:切换到root账户:命令:sudo -i  然后会提示让你输入密码

        第二步:vi /etc/profile,并进行添加


         第三步:使配置文件生效:source /etc/profile

         第四步:使用


        ② 对单一用户生效的永久性变量(用户级)

    该类环境变量只对当前的用户永久生效。也就是说假如用户A设置了此类环境变量,这个环境变量只有A可以使用。而对于其他的B,C,D,E….用户等等,这个变量是不存在的。

    设置方法:在用户主目录”~”下的隐藏文件 “.bashrc”中添加自己想要的环境变量。 
    查看隐藏文件: 首先切目录:cd ~    然后查看:echo .*   (参考:点击打开链接

 
    利用vim打开.bashrc文件,利用export添加环境变量。与上相同。同样注意,添加完成后新的环境变量需要调用source ./.bashrc 该文件才会生效。否则只能在下次重进此用户时才能生效。

    注意,系统中可能存在两个文件,.bashrc和.bash_profile(有些系统中只有其中一个)。原则上来说设置此类环境变量时在这两个文件任意一个里面添加都是可以的。

    ~/.bash_profile是交互式login方式进入bash shell运行。 
    ~/ .bashrc是交互式non-login方式进入bash shell运行。

    二者设置大致相同。通俗点说,就是.bash_profile文件只会在用户登录的时候读取一次,而.bashrc在每次打开终端进行一次新的会话时都会读取。

    ③ 临时有效的环境变量(只对当前shell有效)

    此类环境变量只对当前的shell有效。当我们退出登录或者关闭终端再重新打开时,这个环境变量就会消失。是临时的。

    设置方法:直接使用export指令添加。 

⑶ 设置环境变量常用的几个指令

    ① echo

         查看显示环境变量,变量使用时要加上符号“$”例:echo $PATH

    ② export

        设置新的环境变量 
             export 新环境变量名=内容 
        例:export MYNAME=”LLZZ”

    ③ 修改环境变量

        修改环境变量没有指令,可以直接使用环境变量名进行修改。 
        例:MYNAME=”ZZLL”

    ④ env

            查看所有环境变量

    ⑤ set

        查看本地定义的所有shell变量

    ⑥ unset

        删除一个环境变量 
        例 unset MYNAME

   ⑦ readonly

        设置只读环境变量。 
        例:readonly MYNAME

⑷ 常用的几个环境变量(都为大写)

    ① PATH

    指定命令的搜索路径。通过设置环境变量PATH可以让我们运行程序或指令更加方便。 
       echo $PATH 查看环境变量PATH。 

    每一个冒号都是一个路径,这些搜索路径都是一些可以找到可执行程序的目录列表。当我们输入一个指令时,shell会先检查命令是否是内部命令,不是的话会再检查这个命令是否是一个应用程序。然后shell会试着从搜索路径,即PATH中寻找这些应用程序。如果shell在这些路径目录里没有找到可执行文件。则会报错。若找到,shell内部命令或应用程序将被分解为系统调用并传给Linux内核。

    举个例子: 
    现在有一个c程序test.c通过gcc编译生成的可执行文件a.out(功能:输出helloworld)。我们平常执行这个a.out的时候是使用 
      ❶ 相对路径调用: ./a.out  (”.”代表当前目录,”/”分隔符)。 
      ❷ 绝对路径调用:/home/lzk/test/a.out 
      ❸ 通过设置PATH环境变量,直接用文件名调用: a.out (只要可以通过PATH中路径找得到这个可执行文件)
 

    如何添加PATH中的路径:

    使用export指令,将a.out的路径添加到搜索路径当中

       命令:export PATH=$PATH:路径   (PATH中路径是通过冒号“:”进行分隔的,把新的路径加在最后就OK) 

    ② HOME

    指定用户的主工作目录,即为用户登录到Linux系统中时的默认目录,即“~”。

    ③ HISTSIZE

    指保存历史命令记录的条数。我们输入的指令都会被系统保存下来,这个环境变量记录的就是保持指令的条数。一般为1000。 

    这些历史指令都被保存在用户工作主目录“~”下的隐藏文件.bash_profile中。 

    我们可以通过指令history来查看。 

    ④ LOGNAME

        指当前用户的登录名

    ⑤ HOSTNAME

        指主机的名称。

    ⑥ SHELL

     指当前用户用的是哪种shell

    ⑦ LANG/LANGUGE

        和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。

    ⑧ MAIL

        指当前用户的邮件存放目录

    ⑨ PS1

     第一级Shell命令提示符,root用户是#,普通用户是$

    ⑩ PS2

     第二级命令提示符,默认是“>”

    ⑪ PS3

        第三级命令提示符。主要用于select循环控制结构的菜单选择提示符 :【等待一个链接】

    ⑫ TMOUT

        用户和系统交互过程的超时值。

        系统与用户进行交互时,系统提示让用户进行输入,但用户迟迟没有输入,时间超过TMOUT设定的值后,shell将会因超时而终止执行。

⑸ 总结

    环境变量是和shell紧密相关的,用户登录系统后就启动了一个shell,对于Linux来说一般是bash(Bourne Again shell,Bourne shell(sh)的扩展),也可以切换到其他版本的shell。

        bash有两个基本的系统级配置文件:/etc/bashrc和/etc/profile。这些配置文件包含了两组不同的变量:shell变量和环境变量。shell变量是局部的,而环境变量是全局的。环境变量是通过shell命令来设置。设置好的环境变量又可以被所以当前用户的程序使用。