SHELL入门教程(6)-环境

来源:互联网 发布:通达信炒股软件下载 编辑:程序博客网 时间:2024/06/11 03:19

shell入门教程(1)-shell基础 - justkk的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/justkk/article/details/43795131

shell入门教程(2)-变量和参数 - justkk的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/justkk/article/details/44081993

shell入门教程(3)-命令编辑 - justkk的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/justkk/article/details/44617445

shell入门教程(4)-作业控制 - justkk的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/justkk/article/details/46801163

SHELL入门教程(5)-算术运算 - justkk的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/justkk/article/details/47025297

SHELL入门教程(6)-环境 - justkk的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/justkk/article/details/47025321

SHELL入门教程(7)-编写脚本 - justkk的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/justkk/article/details/47025397

 

 

1、登录之后

用户登录时,SHELL在显示命令提示符之前还有一些动作。

执行/etc/profile,这是整个系统范围的环境文件,每个用户登录时都会执行。

执行用户的 .bash_profile,位于用户的HOME目录下。这是用户自己的环境文件,用以设置一些个性化参数。

 

2、环境文件

一个特殊的环境变量,BASH_ENV,定义一个环境文件。

每次SHELL执行一个脚本时,都会首先执行这个环境文件。

简单演示一下,其中每行前面的#表示命令提示符。

# cat 0.sh  查看脚本文件0.sh的内容,简单的输出一个信息

echo "hi"

# ./0.sh  执行并查看输出

hi

# export BASH_ENV=0.sh  定义环境文件

# ./0.sh  再次执行,并查看输出

hi

hi

执行其他的任何一个脚本,都会首先执行环境文件0.sh

 

3、环境变量

SHELL包含很多预定义的环境变量,你可以用来定制自己的工作环境。

PATH  命令的查找路径,包含冒号分隔的一组目录列表

用户输入一条命令时,如果没有明确指定命令的路径,SHELL将依次在PATH指定的各个目录中搜索,直到找到对应的命令为止。

如果多个路径下包含同名的文件,将使用第一个找到的命令文件,并跳出查找过程;

如果所有指定的路径下都没有找到这个命令文件,SHELL将报错: command not found...

PS1  命令行提示符

还有其他一些常用的环境变量,不再一一列举。

 

4、SHELL选项

SHELL有一组选项,可以调整其行为方式。

noglob  --禁止文件名称扩展,缺省是关闭状态

set -o noglob 禁止文件名称扩展,通配符将失去其特殊含义,仅仅表示字符本身,如$ ? *

set +o noglob 启用文件名称扩展

选项前面使用-表示打开相应的功能,使用+表示关闭对应的功能。

上面两个命令分别等价于 set -f set +f

vi  --使用 vi 风格的编辑器在线编辑命令
查看所有选项的当前状态

set -o

 

5、别名

别名是一个命令的另一个等价名字,示例:aliasaa="ls -F"

说明:

1、如果使用单引号,那么别名将在每次使用时重新扩展,这在别名的定义包含变量时有用,如:

alias p='ls $D'

之后变量 D 的取值将影响别名p的执行行为。

2、如果别名的定义以空白结尾,那么执行时将检查其参数是否是别名,并相应扩展。

alias p='echo ' h=Hello   # 同时定义两个别名,注意别名p的字母o后面有一个空格

p h  # 此时会输出Hello

显示所有的别名,alias
删除别名,使用 unalias命令,如unalias h
不解释别名

引用别名时,使用单引号包含别名,SHELL将不解释别名,仅仅作为其原始含义。如:

'p'  # 此时SHELL尝试执行p本身

 

6、命令行提示符

命令行提示符也是通过预定义的环境变量定义的,常用的有 PS1PS2

PS1 是主要的命令行提示符,SHELL等待用户输入命令时显示PS1的值;

PS2 是次要的命令行提示符,SHELL需要更多输入时显示PS2的值,如命令续行。缺省值是>

可以尝试改变PS1PS2看看效果。

 

7、子SHELL

下述情况将产生一个子SHELL:使用()包裹一组命令、执行命令替换、后台进程。

SHELL是当前SHELL克隆的一个副本,当前SHELL中的变量可以在子SHELL中使用,而子SHELL对变量的修改不会影响当前SHELL,示例:

A=3

(echo $A; A=4)  # SHELL中会看到3,并更改为4

echo $A  # SHELL结束,在当前SHELL中查看,仍然是3

 

8、嵌套SHELL

与子SHELL类似,嵌套执行一个SHELL,在新的SHELL中的修改同样不会影响之前的SHELL

bash  # 执行一个新的SHELL

A=4  # 修改变量

exit  # 退出新的SHELL,回到之前的SHELL

echo $A  # 仍然是3

另外注意,与子SHELL有所不同,当前SHELL中的普通变量不能在新的SHELL中使用。

A=3  # 定义变量A

bash  # 执行一个新的SHELL

echo $A  # 新的SHELL中,看不到3

exit

此时需要当前SHELL导出为环境变量,即:

export A=3  # 当前SHELL中定义变量A,并导出为环境变量

重复上面的验证过程,并查看结果。

这个特性可以用来保留工作现场:开启一个新的SHELL,执行一组操作之后退出,一切烟消云散..

 

0 0