• Linux:环境变量


    变量

    变量,准确的说应该是 Shell 变量,就是计算机中用于记录一个值(不一定是数值,也可以是字符或字符串)的符号,而这些符号将用于不同的运算处理中。

    变量的作用域即变量的有效范围(比如一个函数中、一个源文件中或者全局范围),在该范围内只能有一个同名变量。一旦离开则该变量无效,如同不存在这个变量一般。

    在linux中,使用 declare 命令创建一个变量名为 temp 的变量:

    declare temp
    
    • 1

    使用 = 号赋值运算符,将变量 tmp 赋值:

    temp=123
    
    • 1

    使用 echo 命令和 $ 符号读取变量的值:

    echo $temp
    
    • 1

    注意:并不是任何形式的变量名都是可用的,变量名只能是英文字母、数字或者下划线,且不能以数字作为开头。

    环境变量

    环境变量的作用域比自定义变量的要大,如 Shell 的环境变量作用于自身和它的子进程。Shell 程序作为一个进程运行在操作系统之上,在 Shell 中运行的大部分命令都将以 Shell 的子进程的方式运行。

    在这里插入图片描述
    按变量的生存周期来划分,Linux 变量可分为两类:
    永久的:需要修改配置文件,变量永久生效;
    临时的:使用 export 命令行声明即可,变量在关闭 shell 时失效。

    通过export命令可以将自定义变量导出为环境变量:

    export TEMP
    
    • 1

    为了与普通变量区分,通常我们习惯将环境变量名设为大写:

    echo $TEMP
    
    • 1

    可以使用 unset 命令删除一个环境变量:

    unset TEMP
    
    • 1

    修改环境变量的命令:

    变量设置方式说明
    ${变量名#匹配字串}从头向后开始匹配,删除符合匹配字串的最短数据
    ${变量名##匹配字串}从头向后开始匹配,删除符合匹配字串的最长数据
    ${变量名%匹配字串}从尾向前开始匹配,删除符合匹配字串的最短数据
    ${变量名%%匹配字串}从尾向前开始匹配,删除符合匹配字串的最长数据
    ${变量名/旧的字串/新的字串}将符合旧字串的第一个字串替换为新的字串
    ${变量名//旧的字串/新的字串}将符合旧字串的全部字串替换为新的字串

    修改PATH环境变量内容

    mypath=$PATH
    echo $mypath
    # 删除PATH环境变量中的/home/shiyanlou/mybin字符串
    mypath=${mypath%/home/shiyanlou/mybin}
    # 或使用通配符 * 表示任意多个任意字符
    mypath=${mypath%*/mybin}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    例子:使用PATH环境变量执行命令

    1、创建一个 C 语言 hello world 程序:

    gedit hello_world.c
    
    • 1

    2、输入如下内容,不能省略第一行:

    #include <stdio.h>
    
    int main(void)
    {
        printf("hello world!\n");
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3、保存后使用 gcc 生成可执行文件:

    gcc -o hello_world hello_world.c
    
    • 1

    4、在 /home/shiyanlou 家目录创建一个 mybin 目录,并将上述 hello_world 文件移动到其中:

    mkdir mybin
    mv hello_world mybin/
    
    • 1
    • 2

    5、在 mybin 目录中运行你刚刚创建的程序

    cd mybin
    ./hello_world
    
    • 1
    • 2

    输出为:

    hello world!
    
    • 1

    回到上一级目录,也就是 shiyanlou 家目录,当再想运行那两个程序时,会发现提示命令找不到,除非加上命令的完整路径,但那样很不方便,如何做到像使用系统命令一样执行自己创建的脚本文件或者程序呢?那就要将命令所在路径添加到 PATH 环境变量了。

    在每个用户的 home 目录中有一个 Shell 每次启动时会默认执行一个配置脚本,以初始化环境,包括添加一些用户自定义环境变量等等。这里使用的 Shell 是 zsh,它的配置文件是 .zshrc,相应的如果使用的 Shell 是 Bash,则配置文件为 .bashrc。它们在 etc 下还都有一个或多个全局的配置文件,不过我们一般只修改用户目录下的配置文件。Shell 的种类有很多,可以使用 cat /etc/shells 命令查看当前系统已安装的 Shell。

    6、使用下面命令直接添加内容到 .zshrc 中:

    echo "PATH=$PATH:/home/shiyanlou/mybin" >> .zshrc
    
    • 1

    上述命令中 >> 表示将标准输出以追加的方式重定向到一个文件中,注意前面用到的 > 是以覆盖的方式重定向到一个文件中,使用的时候一定要注意分辨。在指定文件不存在的情况下都会创建新的文件。
    7、在 Shell 中修改了一个配置脚本文件之后(比如 zsh 的配置文件 home 目录下的 .zshrc),每次都要退出终端重新打开甚至重启主机之后其才能生效,可以使用 source 命令来让其立即生效:

    source .zshrc
    
    • 1

    8、由于hello_world二进制文件在/home/hiyanlou/mybin目录下,而该目录存在于环境变量PATH中,故可以直接使用hello_world程序作为一个命令来输出结果,这样也就省去了通过具体的路径来执行程序的麻烦:

    hello_world
    
    • 1

    等价于:

    ./mybin/hello_world
    
    • 1

    输出为:

    hello world!
    
    • 1
  • 相关阅读:
    linux shell中 if else以及大于、小于、等于逻辑表达式
    股票数据接口l2有哪些过人之处?
    社区论坛小程序系统源码+自定义设置+活动奖励 自带流量主 带完整的搭建教程
    数据湖和数据仓库的区别?
    金九银十就靠它啦!共计1700页的Java岗面试核心MCA版,面试必胜!!
    三数之和(LeetCode 15)
    docker 安装minio
    回归啦!!!
    数论练习题
    计网 | 一文解析TCP协议所有知识点
  • 原文地址:https://blog.csdn.net/weixin_49346755/article/details/125416798