首页 > 系统 > Linux >

4、linux环境变量与文件查找

2017-03-29

本节介绍环境变量的作用与用法,及几种搜索文件的方法。学会这些技巧可高效地使用Linux。

本节介绍环境变量的作用与用法,及几种搜索文件的方法。学会这些技巧可高效地使用Linux

环境变量

shell的变量

学习bash 脚本编程

declare命令创建一个变量tmp:

declare tmp

其实也可以不用 declare 预声明一个变量,直接即用即创建,这里只是告诉你 declare 的作用,这在创建其它指定类型的变量(如数组)时会用到。

tmp=shiyanlou //不用declare,直接给变量赋值

echo $tmp //$符号用于读取变量、

环境变量

环境变量的作用域比自定义的变量的作用域要大,如Shell的环境变量作用于自身和它的子进程。在所有的 UNIX 和类 UNIX 系统中,每个进程都有其各自的环境变量设置,且默认情况下,当一个进程被创建时,处理创建过程中明确指定的话,它将继承其父进程的绝大部分环境设置。Shell 程序也作为一个进程运行在操作系统之上,而我们在 Shell中运行的大部分命令都将以 Shell 的子进程的方式运行。

通常我们会涉及到的变量类型有三种:

当前Shell进程私有用户自定义的变量,如上,创建的tmp变量,只在当前Shell中有效。 Shell本身内建的变量 从自定义变量导出的环境变量

也有三个与上述三种环境变量相关的命令,set,evn,export。这三个命令很相似,都是用于打印变量的,区别在于涉及的是不同范围的环境变量,见下表:命令说明

set显示当前shell所有变量,包括其内建环境变量(与Shell外观等相关),用户自定义变量及导出的环境变量

env显示与当前用户相关的环境变量,还可以让命令在指定环境中运行

export显示从Shell中导出成环境变量的变量,也能通过它将自定义变量到导出为环境变量

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

实验楼图片

永久生效

按照生存周期来划分,Linux变量可以分为两类:

永久的:需要修改配置文件,变量永久生效 临时的:使用export命令行声明即可,变量在关闭shell时会失效

这里介绍两个重要文件:

/etc/bashrc和/etc/profile它们分别存放的是shell变量和环境变量

cd /home/shiyanlou

ls -a

这里有 个叫.profile的隐藏文件,只对当前用户生效

而写在/etc/profile里边的是对所有用户永久生效的。

所以如果想要添加一个环境变量,只需要打开/etc/profile,在最后加上你想要添加的环境变量即可。

命令的查找路径与顺序

你可能很早之前就有疑问,我们在 Shell 中输入一个命令,Shell 是怎么知道在哪去找到这个命令然后执行的呢?这是通过环境变量PATH来进行搜索的,熟悉 Windows 的用户可能知道 Windows 中的也是有这么一个 PATH 环境变量。这个PATH里面就保存了Shell中执行的命令的搜索路径。

查看PATH环境变量的内容:

echo $PATH

默认情况下你会看到如下输出:

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

创建一个shell脚本:

gedit hello_shell.sh

在脚本中添加如下内容,保存并退出(注意不要省掉第一行,这不是注释):

#!/bin/bash

for ((i=0; i<10; i++));do

echo "hello shell"

done

exit 0

为文件添加可执行权限:

chmod 755 hello_shell.sh

执行脚本

./hello_shell.sh

创建一个C语言程序

gedit hello_world.c

#include

int main()

{

printf("hello world!\n");

return 0;

}

使用gcc生成可执行文件:

gcc -o hello_world hello_world.c

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

在shiyanlou家目录中创建一个mybin目录,并将上述hello_shell.sh和hello_world文件移动到其中:

mkdir mybin

mv hello_shell.sh hello_world mybin/

现在在家目录下要执行上述两个可执行文件,使用绝对路径或相对路径,那样很不方便。

如何做到像使用系统命令一样执行自己创建的脚本文件或者程序呢?

那就要将命令所在路径添加到PATH环境变量中。

添加自定义路径到“PATH”环境变量

在前边我们应该注意到PATH里面的路径是以:作为分隔符,所以我们可以这样添加自定义路径:

PATH=$PATH:/home/shiyanlou/mybin

注意,这里一定要用绝对路径

现在你就可以在其他任意目录执行那两个命令了(注意需要去掉前面的./)。你可能会意识到这样还并没有很好的解决问题,因为我给 PATH 环境变量追加了一个路径,它也只是在当前 Shell 有效,我一旦退出终端,再打开就会发现又失效了。有没有方法让添加的环境变量全局有效?或者每次启动 Shell 时自动执行上面添加自定义路径到 PATH 的命令?下面我们就来说说后一种方式——让它自动执行。

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

我们可以简单的使用下面命令直接添加内容到.zshrc中:

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

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

修改和删除已有变量

变量的修改有以下几种方式:

变量设置方式说明

${变量名#匹配字串}从头向后开始匹配,删除符合匹配字串的最短数据

${变量名##匹配字串}从头向后开始匹配,删除符合匹配字串的最长数据

${变量名%匹配字串}从尾向前开始匹配,删除符合匹配字串的最短数据

${变量名%%匹配字串}从尾向前开始匹配,删除符合匹配字串的最长数据

${变量名/旧的字串/新的字串}将符合旧字串的第一个字串替换为新的字串

${变量名//旧的字串/新的字串}将符合旧字串的全部字串替换为新的字串

相关文章
最新文章
热点推荐