美文网首页Shell编程学习笔记
小鸟初学Shell编程(八)环境变量、预定义变量与位置变量

小鸟初学Shell编程(八)环境变量、预定义变量与位置变量

作者: 小林coding | 来源:发表于2019-10-01 22:05 被阅读0次

    环境变量

    环境变量:每个Shell打开都可以获得到的变量。
    我们知道通过export的方式打开可以让子进程读取父进程的变量的值,那怎么样才能让每一个进程都能读取到变量的值呢?

    在这呢,系统有一些默认的配置文件,把变量嵌入到配置文件就可以了。

    那么,系统已经自带了哪些环境变量呢?我们可以通过env这个命令,查看系统中内置的环节变量。

    [root@lincoding ~]# env
    HOSTNAME=lincoding
    SHELL=/bin/bash
    ……
    SSH_TTY=/dev/pts/0
    USER=root
    ……
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
    LANG=en_US.UTF-8
    SHLVL=1
    HOME=/root
    LOGNAME=root
    ……
    

    由于环节变量太多了,省略一部分。以上都是系统的环境变量,新的终端打开,以上的变量都会被初始化完成。

    可以通过变量的引用查看单独某个的环境变量的值,环境变量的都是大写为主。

    [root@lincoding ~]# echo $PATH
    /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
    [root@lincoding ~]# echo $SHELL
    /bin/bash
    

    PATH系统环境变量是定义了命令的搜索路径,SHELL是定义了系统默认的Shell是bash。

    PATH环境变量

    PATH系统环境变量是定义了命令的搜索路径,意思就是我们输入的Linux命令,都会在PATH变量定义的路径里寻找,若存在则执行命令,若不存在则报错命令不存在。
    其实所谓的不存在,就是在搜索路径里没有找到对应的命令。

    [root@lincoding ~]# echo $PATH
    /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
    

    假设要增加自定义的搜索路径,则可以通过下面的方式

    [root@lincoding ~]# PATH=$PATH:/home
    [root@lincoding ~]# echo $PATH
    /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/home
    

    不过上面的方式,新增的自定义路径是PATH变量,只在当前终端作用范围生效,其他进程是不生效的。


    预定义变量

    预定义变量有?、$$、0三个

    • $?表示的是上一条命令执行的状态码,0代表正常,非0代表出错
    [root@lincoding home]# cd /home/
    [root@lincoding home]# echo $?
    0
    [root@lincoding home]# cd /file
    -bash: cd: /file: No such file or directory
    [root@lincoding home]# echo $?
    1
    
    • $$查看当前进程的pid
    [root@lincoding home]# echo $$
    18136
    
    • $0表示当前进程的名称
    [root@lincoding home]# echo $0
    -bash
    

    Shell脚本里使用上述三个预定义变量,脚本如下:

    #!/bin/bash
    
    # PID
    echo $$
    
    echo $0
    

    执行效果:

    [root@lincoding home]# ./test.sh
    702
    ./test.sh
    [root@lincoding home]# . test.sh
    18136
    -bash
    [root@lincoding home]# source test.sh
    18136
    -bash
    

    根据不同的执行方式,那么$0产生的名称也不同。


    位置参数

    位置参数用于读取执行Shell脚本时传入的参数的值,形式如下:

    • $1 参数一
    • $2 参数二
    • $3 参数三

    以此类推,当参数10以上的时候,需要注意一下, 需要用{10}、{11}方式。

    举个例子,如下Shell脚本:

    #!/bin/bash
    
    # $1 $2 $3 ... $9 ${10}
    echo $1
    echo $2
    echo $3
    

    执行结果:

    [root@lincoding home]# ./test.sh a b c
    a
    b
    c
    

    这里介绍一下获取传入Shell脚本参数的总个数可以用$#,如下例子:

    #!/bin/bash
    
    echo $#
    

    执行结果:

    [root@lincoding home]# ./test.sh
    0
    [root@lincoding home]# ./test.sh a
    1
    [root@lincoding home]# ./test.sh a b
    2
    [root@lincoding home]# ./test.sh a 123 b
    3
    

    小结

    本节主要介绍了环境变量的特殊性,PATH环境变量定义的就是命令的搜索路径,若想知道其他环境变量,可以使用env命令查看。

    预定义变量是系统已经预定义好的变量,分别是?、$$、0。并且还可以通过位置变量$1 $2 $3 ... 来获取Shell的传入参数的值。

    相关文章

      网友评论

        本文标题:小鸟初学Shell编程(八)环境变量、预定义变量与位置变量

        本文链接:https://www.haomeiwen.com/subject/gshlpctx.html