最新公告:

中华视窗是诚信为本,市场在变,我们的诚信永远不变...

中华视窗

咨询热线

400-123-4657

行业资讯

当前位置: 首页 > 新闻动态 > 行业资讯

【读书笔记】Linux命令行与Shell脚本编程大全--使用Linux环境变量

添加时间:2024-02-04

/

文章目录2.设置用户定义变量3.删除环境变量4.默认的shell环境变量5.设置PATH环境变量6.定位系统环境变量7.数组变量

note:很多程序和脚本都通过环境变量来获取系统信息、存储临时数据和配置信息。

1.什么是环境变量?

bash shell用一个叫作环境变量( )的特性来存储有关shell会话和工作环境的信息(这也是它们被称作环境变量的原因)。

这项特性允许你在内存中存储数据,以便程序或shell中运行的脚本能够轻松访问到它们。

这也是存储持久数据的一种简便方法。

环境变量分为如下两类:

全局环境变量局部环境变量 1.1 全局环境变量

全局环境变量对于shell会话和所有生成的子shell都是可见的。

如何查看全局环境变量?

使用env或者命令,甚至是echo,注意使用echo时候,必须在环境变量名前面加上一个美元符号$。

这是因为在echo命令中,在变量名前加上$可不仅仅是要显示变量当前的值。它能够让变量作为命令行参数。

note:要显示个别环境变量的值,可以使用命令,但是不要用env命令。

eg:

echo $HISTSIZE
printenv HOME

1.2 局部环境变量

局部变量则只对创建它们的shell可见。

在Linux系统并没有一个只显示局部环境变量的命令。set命令会显示为某个特定进程设置的所有环境变量,包括局部变量、全局变量以及用户定义变量。

note:系统环境变量基本上都是使用全大写字母,以区别于普通用户的环境变量。

命令env、和set之间的差异很细微。set命令会显示出全局变量、局部变量以及用户定义变量。它还会按照字母顺序对结果进行排序。env和命令同set命令的区别在于前两个命令不会对变量排序,也不会输出局部变量和用户定义变量。在这种情况下,env和的输出是重复的。不过env命令有一个没有的功能,这使得它要更有用一些。 2.设置用户定义变量 2.1 设置局部用户变量

1.可以通过等号给环境变量赋值,值可以是数值或字符串。

eg: =Hello

ps:如果要给变量赋一个含有空格的字符串值,必须用单引号来界定字符串的首和尾。

eg: ="Hello World"

note:所有的环境变量名均使用大写字母,这是bash shell的标准惯例。如果是你自己创建的局 部变量或是shell脚本,请使用小写字母。变量名区分大小写。在涉及用户定义的局部变量 时坚持使用小写字母,这能够避免重新定义系统环境变量可能带来的灾难。

:

变量名、等号和值之间没有空格,这一点非常重要。否则视为单独命令。局部环境变量在子shell中不可见,即不可用。子shell中创建的局部环境变量退出该子shell后失效。父shell中创建的局部环境变量在进入子shell后退出子shell返回父shell,原先创建的局部环境变量仍可用。 2.2 设置全局用户变量

在设定全局环境变量的进程所创建的子进程中,该变量都是可见的。

创建全局环境变量的方法是先创建一个局部环境变量,然后再把它导出到全局环境中。

该过程使用命令来完成,变量名前不需要加$。

eg:

my_variable="I am Global now"
export my_variable
echo $my_variable
I am Global now

:

修改子shell中全局环境变量并不会影响到父shell中该变量的值。反之,修改父shell中的全局变量则会影响到子shell中该变量的值,子shell甚至无法使用命令改变父shell中全局环境变量的值。 3.删除环境变量

删除环境变量则使用unset命令来实现。记住引用环境变量的时候不要使用$

eg:

unset my_variable

如果要用到变量,使用$;如果要操作变量,不使用$。这条规则的一个例外就是使用显示某个变量的值。和修改变量一样,在子shell中删除全局变量后,无法将效果反映到父shell中。 4.默认的shell环境变量

默认情况下,bash shell会用一些特定的环境变量来定义系统环境。

具体有哪些环境变量,可参照该书的第6.4章节或自行查询资料。

5.设置PATH环境变量

何为PATH环境变量?

当你在shell命令行界面中输入一个外部命令时,shell必须搜索系统来找到对应的程序。

PATH环境变量定义了用于进行命令和程序查找的目录。

如果命令或者程序的位置没有包括在PATH变量中,那么如果不使用绝对路径的话,shell是没法找到的。

Q:如何解决应用程序放置可执行文件的目录常常不在PATH环境变量所包含的目录中的问题?

A:保证PATH环境变量包含了所有存放应用程序的目录,可以把新的搜索目录添加到现有的PATH环境变量中,无需从头定义。PATH中各个目录之间是用冒号分隔的。你只需引用原来的PATH值,然后再给这个字符串添加新目录就行了。

eg:

环境变量的变量值怎么设置_变量环境怎么设置_设定环境变量

$ echo $PATH 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin: 
/sbin:/bin:/usr/games:/usr/local/games 
$ 
$ PATH=$PATH:/home/christine/Scripts 
$ 
$ echo $PATH 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/ games:/usr/local/games:/home/christine/Scripts

这样就可以使用/home//下面的命令了。

:

对PATH变量的修改只能持续到退出或重启系统。这种效果并不能一直持续。 6.定位系统环境变量

当Linux系统启动一个bash shell的时候,默认情况下bash会在几个文件中查找命令,称之为启动文件或环境文件。

bash检查的启动文件取决于你启动bash shell的方式。

启动bash shell有如下3种方式:

登录时作为默认登录shell作为非登录shell的交互式shell作为运行脚本的非交互shell 6.1 登录时作为默认登录shell

当登录Linux系统时,bash shell会作为登录shell启动。

登录shell会从如下5个不同的启动文件里读取命令:

|启动文件| 描述 | 分类 |

|–|–|–|–|

| /etc/ | /etc/文件是bash shell默认的的主启动文件

只要你登录了Linux系统,bash就会执行/etc/启动文件中的命令。 | 默认的bash shell

主启动文件 |

| $HOME/. | 提供一个用户专属的启动文件来定义该用户所用到的环境变量 | $HOME目录下的

启动文件 |

| $HOME/. | 提供一个用户专属的启动文件来定义该用户所用到的环境变量 | $HOME目录下的

启动文件 |

| $HOME/. | 提供一个用户专属的启动文件来定义该用户所用到的环境变量 | $HOME目录下的

启动文件 |

| $HOME/. | 提供一个用户专属的启动文件来定义该用户所用到的环境变量 | $HOME目录下的

启动文件 |

ps:$HOME表示的是某个用户的主目录。它和波浪号(~)的作用一样。

/etc/文件是系统上默认的bash shell的主启动文件。系统上的每个用户登录时都会执行这个启动文件。

6.2 作为非登录shell的交互式shell

当bash shell不是登录系统时启动的(比如是在命令行提示符下敲入bash时启动),则是交互式shell。交互式shell不会像登录shell一样运行,但它依然提供了命令行提示符来输入命令。

:

.文件有两个作用:一是查看/etc目录下通用的文件,二是为用户提供一个定制自己的命令别名和私有脚本函数(将在第17章中讲到)的地方。如果bash是作为交互式shell启动的,它就不会访问/etc/文件,只会检查用户HOME目录中的.文件。 6.3 作为运行脚本的非交互shell

系统执行shell脚本时用的就是这种shell。不同的地方在于它没有命令行提示符。

bash shell提供了环境变量。

当shell启动一个非交互式shell进程时,它会检查这个环境变量来查看要执行的启动文件。

如果有指定的文件,shell会执行该文件里的命令,这通常包括shell脚本变量设置。

如果变量没有设置,shell脚本到哪里去获得它们的环境变量呢?

有些shell脚本是通过启动一个子shell来执行的。子shell可以继承父shell导出过的变量。

例如:如果父shell是登录shell,在/etc/、/etc/.d/*.sh和$HOME/.文件中

设置并导出了变量,用于执行脚本的子shell就能够继承这些变量。

:

脚本能以不同的方式执行。只有其中的某一些方式能够启动子shell。 6.4 环境变量持久化

Q:如何实现环境变量持久化?

A:在/etc/.d目录中创建一个以.sh结尾的文件。把所有新的或修改过的全局环境变量设置放在这个文件中。也可以把自己的alias设置放在$HOME/.启动文件中,使其效果永久化

:

图形化界面组成部分(如GUI客户端)的环境变量可能需要在另外一些配置文件中设置,这和设置bash shell环境变量的地方不一样。尽量不要将新的或修改过的变量设置放在/etc/文件中。虽然它能够将环境变量持久化,但一旦升级了所使用的发行版,这个文件也会更新,那么之前定制过的变量设置就全丢失了。 7.数组变量

环境变量存在一个特性:可以作为数组使用。

数组是能够存储多个值的变量。这些值可以单独引用,也可以作为整个数组来引用。

要给某个环境变量设置多个值,可以把值放在括号里,值与值之间用空格分隔。

eg:

 mytest=(one two three four five)echo $mytest   错误echo ${mytest[2]}  正确要显示整个数组变量,可用星号作为通配符放在索引值的位置。echo ${mytest[*]}

用unset命令删除数组中的某个值。unset [2]环境变量数组的索引值都是从零开始。

申明:文中没特殊注明,图皆来自Linux命令行与shell脚本编程大全。

联系我们

电话:400-123-4657

传真:+86-123-4567

地址:浙江 温州市 温州大道欧江大厦26188号

邮箱:admin@zhonghuanews.net

电话:400-123-4657 传真:+86-123-4567 地址:浙江 温州市 温州大道欧江大厦26188号
版权所有:Copyright © 2002-2024 中华视窗 版权所有 非商用版本 ICP备案编号:粤IP**********    网站地图