Loading...
墨滴

Frank001

2021/05/30  阅读:33  主题:红绯

环境变量与文件查找

5.1 环境变量与文件查找

  • 变量

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

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

使用=号赋值运算,将变量tmp赋值给hello

tmp=hello
echo $tmp

则输出hello

  • 环境变量

    环境变量的作用域比自定义变量的要大,Shell的环境变量作用域自身和它的子进程。

    在所有的UNIX和类UNIX系统中,每一个进程别创建时,除了创建过程中明确指定的话,它将继承其父进程的绝大部分环境变量。Shell程序也作为一个进程运行在操作系统上,而我们在shell中运行的大部分命令都将以shell的子进程的方式运行。

    • 通常涉及到的变量类型有三种:

      • 当前shell进程私有用户自定义变量,如上面我们创建的tmp变量,只有在当前shell中有效。
      • shell本身内建的变量
      • 从自定义变量导出的环境变量
    • 三个与上述环境变量相关的命令:set,env,export,这三个命令很相似,都是用于打印环境变量信息,区别在于涉及的变量范围不同,

      command description
      set 显示当前shell所有变量,包括其内建环境变量(与shell外观等相关),用户自定义变量及导出的环境变量
      env 显示与当前用户相关的环境变量,还可以让命令在指定环境中娙
      export 显示从shell中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量。
    • 变量生存周期

      • 永久的:需要配置文件,变量永久生效
      • 临时的:使用export命令声明即可,变量在关闭shell时失效
    • /etc/bashrc:存放shell变量(有的linux没有此文件)

    • /etc/profile:存放环境变量(对所有用户生效),所有要添加一个永久生效的环境变量,只需要打开/etc/profile,在最后加上添加环境变量就行了。

  • 命令的查找路径与顺序

    查看PATH环境变量内容

    echo $PATH

    结果

    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

    通常这一类目录下放的都是可执行文件。

    • 创建一个shell脚本

      vim hello.sh

      或者

      gedit hello.sh

      在脚本输入以下内容

      #!/bin/bash

      for ((i=0; i<10; i++));do
          echo "hello shell"
      done

      exit 0

      为文件添加可执行权限

      chmod 755 hello.sh

      执行脚本,进入该文件目录

      ./hello.sh
    • 创建一个C语言程序

      vim hello.c

      输入以下内容

      #include <stdio.h>

      int main(void)
      {
          printf("hello world!\n");
          return 0;
      }

      使用gcc生成可执行文件

      gcc -o hello hello.c

      gcc生成二进制文件默认具有可执行权限,不需要修改

      创建一个mybin目录,把hello和hello.sh移到mybin中,这两个文件分别可以在mybin用./运行,但是在其他目录则找不到该命令,那就要把命令所在路径添加到PATH环境变量中了。

      PATH=$PATH:<上述mybin的绝对路径>

      然后直接运行

      hello
      hello.sh

      不需要加./

      但这样添加变量之后,只是在当前变量有效,一旦退出终端,再打开就失效了。有没有办法让添加的环境变量全局有效?或作者每次启动shell时自行执行上面添加自定义路径到PATH的命令呢?

      在每一个用户的home目录中有一个shell每次启动时会默认执行一个配置脚本,以初始化环境,包括添加一些用户自定义环境变量等等。zsh的配置文件是.zshrc,相应bash的配置文件为.bashrc。它们在etc下还都一个或者多个全局的配置文件,不过我们一般只手改目录用户下的位置文件。

      我们可以简单实用下列命令直接添加到.zshrc中

      echo "PATH=$PATH:<上述mybin的绝对路径>"" >> .zshrc

      上述命令中>>表示将标准输出以追加的方式重定向到一个文件中,注意前面用到的>是以覆盖的方式重新定向到一个文件中,使用的时候一定要注意分辨,在指定文件不存在的情况下都会创建新的文件。

Frank001

2021/05/30  阅读:33  主题:红绯

作者介绍

Frank001