定制AIX操作系统的shell环境

操作系统与外部最主要的接口就叫做shell。shell是操作系统最外面的一层。shell管理你与操作系统之间的交互:等待你输入,向操作系统解释你的输入,并且处理各种各样的操作系统的输出结果。

shell提供了你与操作系统之间通讯的方式。这种通讯可以以交互方式(从键盘输入,并且可以立即得到响应),或者以shell script(非交互)方式执行。shell script是放在文件中的一串shell和操作系统命令,它们可以被重复使用。本质上,shell script是命令行命令简单的组合到一个文件里面。

交互式shell和非交互式shell

交互式模式就是shell等待你的输入,并且执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签退后,shell也终止了。

shell也可以运行在另外一种模式:非交互式模式。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。

shell的类型

在UNIX中主要有两大类shell

Bourne shell (包括 sh, ksh, and bash)

Bourne shell ( sh)

Korn shell ( ksh)

Bourne Again shell ( bash)

POSIX shell ( sh)

C shell (包括 csh and tcsh)

C shell ( csh)

TENEX/TOPS C shell ( tcsh)

Bourne Shell

最初的UNIX shell是由Stephen R. Bourne于20世纪70年代中期在新泽西的AT&T贝尔实验室编写的,这就是Bourne shell。Bourne shell 是一个交换式的命令解释器和命令编程语言。Bourne shell 可以运行为login shell或者login shell的子shell(subshell)。只有login命令可以调用Bourne shell作为一个login shell。此时,shell先读取/etc/profile文件和$HOME/.profile文件。/etc/profile文件为所有的用户定制环境,$HOME/.profile文件为本用户定制环境。最后,shell会等待读取你的输入。

C Shell

Bill Joy于20世纪80年代早期,在Berkeley的加利福尼亚大学开发了C shell。它主要是为了让用户更容易的使用交互式功能,并把ALGOL风格的语法结构变成了C语言风格。它新增了命令历史、别名、文件名替换、作业控制等功能。

Korn Shell

有很长一段时间,只有两类shell供人们选择,Bourne shell用来编程,C shell用来交互。为了改变这种状况,AT&T的bell实验室David Korn开发了Korn shell。ksh结合了所有的C shell的交互式特性,并融入了Bourne shell的语法。因此,Korn shell广受用户的欢迎。它还新增了数学计算,进程协作(coprocess)、行内编辑(inline editing)等功能。Korn Shell 是一个交互式的命令解释器和命令编程语言.它符合POSIX--一个操作系统的国际标准.POSIX不是一个操作系统,而是一个目标在于应用程序的移植性的标准--在源程序一级跨越多种平台。

Bourne Again Shell (bash)

bash是GNU计划的一部分,用来替代Bourne shell。它用于基于GNU的系统如Linux.大多数的Linux(Red Hat, Slackware, Caldera)都以bash作为缺省的shell,并且运行sh时,其实调用的是bash。

POSIX Shell

POSIX shell 是Korn shell的一个变种. 当前提供POSIX shell的最大卖主是Hewlett-Packard。在HP-UX 11.0 , POSIX shell 就是/bin/sh,而bsh是/usr/old/bin/sh.

各主要操作系统下缺省的shell:

AIX 下是Korn Shell.

Solaris和FreeBSD缺省的是Bourne shell.

HP-UX缺省的是POSIX shell.

Linux是Bourne Again shell.

【TIP】

#!/usr/bin/sh的用途

shell script的第一行一般都是#!/usr/bin/sh或#!/usr/bin/ksh等,它的用途就是指出本脚本是用的哪种shell写的,执行时系统应该用哪种shell来解释执行它。

  当你登录时,shell会读取以前设置的初始化文件来设置用户环境。用户环境的定义是通过设置环境变量来实现的。当登录操作系统时,shell主要使用两大类profile文件来定义用户环境。一类是用来为所有用户定制环境,另一类是为个人定义自己的环境。

登录时,shell首先执行/etc/profile文件中的命令,然后运行/etc/environment文件中的命令来设置你的系统环境。这两个文件运行完毕后,系统会接着检查在你的home目录下是否有.profile文件,如果.porfile文件存在,就运行它。 .profile文件还会指出是否还有一个环境文件。如果还有环境文件(通常叫.env或者.kshrc)存在,系统会运行这个文件,并设置你的环境变量。

/etc/profile文件

用户在登录时,操作系统定制用户环境时使用的第一个文件就是/etc/profile。这个文件控制着全系统范围内的缺省变量,如Export变量,文件创建的掩码,终端类型,以及新邮件到达时的提示信息等等。

系统管理员为所有用户配置porfile文件,只有系统管理员可以更改这个文件。

/etc/environment文件

在登录时操作系统使用的第二个文件是/etc/environment。/etc/environment文件包含为所有进程所配置基本环境的变量。当一个新进程开始时,exec子程序生成一个形为Name=Value的字符串数组。这个字符串数组被称为环境,每一个被定义名字被称作环境变量或者 shell变量。exec子程序允许整个环境一次设置完成。

当你登录时,系统在读取你自己的profile前,设置环境文件的环境变量。下面是构成基本环境的变量:

HOME:用户登录的或HOME全路径,登录程序从/etc/passwd文件中读取并设置它。

LANG:语言环境

NLSPATH:消息目录的全路径。

LOCPATH:国际语言支持系统表格的全路径

PATH:搜寻命令的目录

TZ:时区信息 ,IBM到现在还得用TAIST--台北时区

【注意】/etc/environment文件中不能包含命令

.profile文件

操作系统在登录时用到的第三个文件是.profile文件。 .profile文件位于用户的home目录,它允许用户定制自己的个人的工作环境。

在登录程序将LOGNAME和HOME变量添加到环境中后,$HOME/.profile文件中的命令就会被执行,.porfile文件中含有你个人的设置会忽略/etc/profile文件中的相矛盾的变量。

一般用.profile来控制下面的缺省值:

打开的shell,命令行提示符,键盘的声音。

.env文件

如果你在.profile文件中有如下内容:ENV=$HOME/.env,操作系统在用户登录时使用的第四个文件是.env文件。.env文件允许用户定制自己的个人的工作环境。文件中含有的你个人的环境变量会忽略/etc/environment文件中的相矛盾的变量。

【注意】/etc/profile,/etc/environment和.profile文件只在登录时运行一次。但是.env文件却在每一次打开一个新shell或一个窗口时都被执行。

【TIP】$HOME/.env文件名可以任意,但在$HOME/.profile中要有相应的声明:export ENV=$HOME/.NewName

【TIP】$HOME/.env文件每当一个子shell被开启都会被执行,所以可以在这里定义在vi中开启的子shell中也可以使用的别名。

【注意】这四个定制环境的文件中,/etc/enviroment文件中只能给变量赋值,而其它三个文件可以使用语句。

原文地址:https://www.cnblogs.com/tychyg/p/5068881.html