`
JAVA天地
  • 浏览: 658249 次
  • 性别: Icon_minigender_1
  • 来自: 太原
文章分类
社区版块
存档分类
最新评论

Unix的环境变量

阅读更多
一、SHELL的功能及分类

SHELL是UNIX作业系统中的'命令编译器'(CommandInter-
preter),它基本上是一个常驻的执行程式,它在使用者一签入
成功後就立即被载入(可在签入後以ps指令看到),主要功能则
在於接受使用者的指令、寻找命令(即档案)的所在并加以执行。
因此,SHELL的不同可能直接影响使用者输入指令的方式、档
案寻找的程序及速度等。

UNIX作业系统的SHELL大致可分为两大系统,一是1970年代
前期由美国贝尔实验室(BELLLAB)所发展的sh(BourneShell),
它是UNIX系统中的标准SHELL,此一系统後来又发展出ksh(Korne
Shell)、bash(BourneAgainShell)等功能更多的介面;另一系
统是美国柏克来大学(Berkekey)在1970年代後期所发展的csh(C
Shell),和它属於同一系统的有tcsh等。

无论上述的那一种shell,它的基本功能与作用都是相同的,
它们之间的不同处可能在於对同一动作处理程序上的不同(会影响
命令处理的速度)、所提供内键命令及变数的或多或寡等,其中内
部命令与变数的多寡直接影响到shell功能的多寡,是使用者在使
用时最容易直接感受到的。

在UNIX系统中,使用者可视自己的需要执行sh、ksh、bash、
csh或tcsh来代替原先使用的shell、改变正在使用的环境;也可
以用'chsh'指令、输入想使用的shell的路径及名称(如/bin/csh,
在Y11-Y14机器上还需输入个人使用者的密码),改变以後每次
login时所使用的shell、使自己所使用的环境能最满足自己使用
上的需要。

二、SHELL的STARTFILES

不管你的loginshell是那一种shell,每一个shell都有它
自己的startfiles,我们设定理想环境时所需使用的指令与设
定的变数,都可以写在这些startfiles中,在login时先後加以
执行,这些startfiles的名称分别是:

SHELLSTARTFILES

sh/etc/profile
$HOME/.profile
bash/etc/profile
$HOME/.profile(or$HOME/.bashrc)
cshNone
$HOME/.cshrc&$HOME/.login
tcshNone
$HOME/.cshrc(or$HOME/.tcshrc)
&$HOME/.login

如果这些档案都存在,那麽它们的执行顺序将是:
1.sh系列/etc/profile-->$HOME/.profile
2.csh系列$HOME/.cshrc-->$HOME/.login

在这些startfiles中,/etc下的profile是系统管理者为
大家设定的,一般使用者无法做任何更动,如果对系统管理者的
设定觉得不够或不符需要,则可在个人帐号下的.profile、
.cshrc、.login增加或修正,尤其是对csh及tcsh的使用者而言,
因为在/etc下并没有startfiles,所以也不会有系统管理者设定
好的环境可以使用,使用者就必须自行设定所需要的所有的变数
与指令,否则常会有寸步难行的感觉,最常见的如许多指令都
因找不到而不能用(因为没有设path)、键无法使用
(因键的作用没有定义)...等。

三、常见的需求与常用的指令

当我们在UNIX环境中工作,常会为了使自己使用时更方便而
产生某些需求,这些常见的需求及其设定方式如:

1.希望键能有作用

在$HOME/.profile或$HOME/.cshrc中加上
sttyerase"^H"

2.希望在UNIX环境中能使用中文

在$HOME/.profile(sh系列)中加上
stty-istripcs8
LC_CTYPE=ISO_8859_1
exportLC_CTYPE
在$HOME/.cshrc(csh系列)中加上
stty-istripcs8
setenvLC_CTYPEiso_8859_1

3.希望能有像DOS系统中DOSKEY的功能
只要是使用bash及tcsh即具备此项功能。

4.希望能使用工作站上的汉书编辑器(he)

在$HOME/.profile(sh系列)中加上
LANG=big5
exportLANG
在$HOME/.cshrc(csh系列)中加上
setenvLANGbig5

5.希望提示符号能随着路径更动而改变

在sh及csh中并无法做到这个功能,而在bash及tcsh中
的设定则分别是:
bash:在$HOME/.profile中加上
PS1='`PWD`>'
或PS1="w>"
tcsh:在$HOME/.cshrc中加上
setprompt='%~>'

除了上面所提到针对特殊需要所做的设定之外,在做环境设
定时常用到的指令还有:

1.stty
设定对输入(input)的定义与如何做输出,这个指令的
叁数极为众多,我们可用

stty-a
看到所有的叁数及其设定,在这些叁数中,常用的有:

istrip(-istrip)
将所有的输入截取成7bits的资料,然而中文的资
料都是8bits的,所以当需要使用中文时,请加上
'-istrip'这个叁数,以避免输入的资料被破坏。

cs7cs8
设定每一字元的资料都是7bits或8bits的资料,
因此在需要使用中文时,通常会有如下的设定:
stty-istripcs8
iuclc(-iuclc)
将标准输入的大写字母视为小写(或取消)。

olcuc(-olcuc)
将小写的字母以大写型态输出(或取消)。

echo(-echo)
将所有的输入由标准输出处输出(或取消输出,即
在萤幕上看不到自己的输入)。

stty除了这些叁数外,还可以用来定义某一个键的特定
功能,如:
sttyerase"^H"
sttykill"^U"

2.mesgy(mesgn)
若在工作时不希望被talk等讯息所打扰,可下'mesgn'
指令,以避免外来迅息中断正要进行的工作('mesgy'则是
恢复与外界的沟通)。

3.umask[nnn]
设定新增档案或目录的属性(mode),新档案或新目录的
mode为系统管理者以create所设定的属性减去nnn,如系统管
理者所设定的档案权利状态是777,而使用者又自行设定了
umask022
则这个使用者在他个人帐号下的每一个新产生的档案的权利
状态都将会是755(777-022)。

4.Function与Alias
对於一连串或某一指令,我们可以用function的方式
(在sh、ksh、bash中)或alias指令(在csh、tcsh、ksh、bash
中),用一简短字串来代替这一个或一连串的指令,function
的用法如:

vi(){
mesgn
/usr/ucb/vi$*
mesgy
}

其中,'vi'是function的名称,{}之间是'vi'这个
function所包含的指令内容,而要注意的是:function的名
称不能与shell的内键指令(builtin)名称相同,否则这个
function即无法成立。

同样的功能,alias指令的用法如:

aliasvi'mesgn;/usr/ucb/vi!*;mesgy'

其中vi即是''中所包含字串的别名,别名与各shell的builtin
名称可以一样(alias本身也是一个内键指令)。

若我们在某一shell中同时建立一名称相同的function
与alias(如在bash中),则alias的执行次序优先於function
的执行。

四、常用变数设定

在UNIX环境中的变数可分为两类,一是环境变数(Enviroment
Variable)、一是shell变数(ShellVariable),二者之间的不同
处在於:环境变数不会因为shell间的更替而失去这个变数的作
用,如PATH是一个环境变数,因此,即使您在设定好PATH之後再
执行另一个shell(如原来是用sh、而後在sh环境中再执行csh),
PATH这个环境变数仍能继续作用,而shell变数(如csh的cwd)则是
只有在特定的shell下才有作用,一执行其他shell就失去作用。

在sh及csh二系列各有其不同的设定变数的方式,为:

1.BourneShell系列
[VAR]=[STRINGorNUMBER]
export[VAR]

如果当我们离开shell、进入另一个程式(如tin)之後,
仍需要使用这个变数,则除了设定这个变数的值外,还需要
以'export'指令加以宣告,如设定萤幕型态的变数TERM就需
以'export'来宣告。

2.CShell系列
set[var]=[STRINGorNUMBER]
setenv[var][STRINGorNUMBER]

其中'set'是单纯设定变数值,'setenv'则除了设定变
数值外,还包含了类似sh中'export'的功能。

而无论是BourneShell或CShell,它们都有一些基本的、
共同的常用变数,如:

1.PATH

设定执行档的寻找路径,若现行目录也要包含在寻找的
路径中,则需在设定路径时给予一'.',表示现行目录亦包含
在寻找的路径中,如:

PATH=.:/bin:/usr/local/bin:/usr/ucb

setpath=(./bin/usr/local/bin/usr/ucb)

2.EDITOR

设定想要使用的编辑器,如
EDITOR=/usr/ucb/vi

setenvEDITOR/usr/ucb/vi

3.HOME

设定个人帐号homedirectory的所在位置,通常在login
时即叁考/etc/passwd而给予一设定值,因此除非使用者有某
些特殊需求,通常不会重新设定。

4.SHELL

同样是在login时即会叁考/etc/passwd的内容而自动设
定,使用者即使重新设定这个变数的内容,对帐号的使用也
不会有任何影响。

5.提示符号的设定

在sh中:PS1="[STRING]"
PS2="[STRING]"
在csh中:setprompt="[STRING]"

当然以上所列的只是使用得较为广泛的变数,若您觉得这些
不够用,可用mansh、mancsh、mantcsh、manbash指令查阅各
shell的说明,在其中您将可看到各个shell所包含的变数及各变数
的用法。

若不清楚某一变数的设定内容,可用'echo$[VAR]'来观察
变数的内容,如:

echo$PATH


五、SHELL环境的异动

前面所提到startfiles中的设定将在使用者login时执行,
但当我们要在线上直接改变所使用的shell(如直接执行'csh'或
'execcsh',此时不会执行startfiles)或是要改变设定的内容,
在编修了startfiles或scriptfiles之後,可利用下列指令将
环境更新,而不必重新login:

.[scriptfile](在sh系列的shell中)
source[scriptfiles](在csh系列的shell中)

直接执行一个scriptfile与用'.'、'source'指令执行各有
其不同的效果,我们可建立一内容为

cd/(或cd[DIR])

的scriptfile来观察它们之间的差异:

因scriptfile的执行环境是一内定或自定的subshell(可在
scriptfile的第一行用类似'#!/bin/csh'指令加以设定),
所以它的直接执行并无法真正将shell环境的工作目录切换到
/,而scriptfile一结束,subshell即不存在、'cd/'指
令的效果也告消失;而用'.'或'source'执行则是真正将
shell的工作环境下的工作目录更换到/,不会因为script
file的结束而使档案中指令的效果消失。
分享到:
评论

相关推荐

    unix环境变量编程

    注意:此文档为pdf格式的,详细讲解了unix的基本命令及一些环境变量编程~~~

    UNIX环境开发基础

    unix下c编程的常用技术总结: 1、UNIX系统常用操作命令 2、UNIX环境变量的设置 3、C程序中常用的基础函数 4、Makefile文件的编写 5、SHELL编程基础

    linux和unix下环境变量详解.docx

    linux和unix下环境变量详解.docx

    不看后悔的unix高级环境变量编程

    不错的好东东~~~~~~~~~~喜欢的赶快来拿~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    UNIX环境高级编程

    7.9 环境变量 130 7.10 setjmp 和longjmp函数 132 7.10.1 自动、寄存器和易失变量 134 7.10.2 自动变量的潜在问题 136 7.11 getrlimit 和setrlimit函数 136 7.12 小结 139 习题 140 第8章 进程控制 141 8.1 引言 141...

    unix环境高级编程1-7章

    另外,标准C 库提供了大量C 程序广泛使用的函数(格式化输入变量的值、比 较两个字符串等)。 系统调用和库函数系统上由Unix 程序员手册中的第2,3部分说明。本书不是这些内 容的重复。该手册没有给出实例,也不...

    UNIX环境高级编程第二版.pdf

    对于想深入了解UNIX的环境变量编程的用户可以看看这本书,强烈推荐

    UNIX环境高级编程.pdf

    7.9 环境变量 130 7.10 setjmp 和longjmp函数 132 7.10.1 自动、寄存器和易失变量 134 7.10.2 自动变量的潜在问题 136 7.11 getrlimit 和setrlimit函数 136 7.12 小结 139 习题 140 第8章 进程控制 141 8.1 引言 141...

    UNIX环境高级编程第二版

    7.9 环境变量 130 7.10 setjmp 和longjmp函数 132 7.10.1 自动、寄存器和易失变量 134 7.10.2 自动变量的潜在问题 136 7.11 getrlimit 和setrlimit函数 136 7.12 小结 139 习题 140 第8章 进程控制 141 8.1 引言 141...

    UNIX环境高级编程(中文版+英文版+源代码)

    7.9 环境变量 130 7.10 setjmp 和longjmp函数 132 7.10.1 自动、寄存器和易失变量 134 7.10.2 自动变量的潜在问题 136 7.11 getrlimit 和setrlimit函数 136 7.12 小结 139 习题 140 第8章 进程控制 141 8.1 引言 141...

    unix环境编程电子书

    147 7.3 进程终止 147 7.4 命令行参数 151 7.5 环境表 152 7.6 C程序的存储空间布局 152 7.7 共享库 154 7.8 存储器分配 154 7.9 环境变量 157 7.10 setjmp和longjmp函数 159 7.11 getrlimit和...

    unix环境高级编程13章

    3. 进程-Unix进程的环境(第七章)、进程控制(第八章)、进程之间的关系(第九章 )以及信号(第十章)。 4. 终端I/O(第十一章)、高级I/O(第十二章)以及精灵进程(第十三章) 5. IPC--进程间通信(第十四、...

    UNIX环境高级编程中文版

    7.9 环境变量 130 7.10 setjmp 和longjmp函数 132 7.10.1 自动、寄存器和易失变量 134 7.10.2 自动变量的潜在问题 136 7.11 getrlimit 和setrlimit函数 136 7.12 小结 139 习题 140 第8章 进程控制 141 8.1 引言 141...

    UNIX环境高级编程(PDF)

    7.9 环境变量 130 7.10 setjmp 和longjmp函数 132 7.10.1 自动、寄存器和易失变量 134 7.10.2 自动变量的潜在问题 136 7.11 getrlimit 和setrlimit函数 136 7.12 小结 139 习题 140 第8章 进程控制 141 8.1 引言 141...

    Unix环境高级编程电子书

    7.9 环境变量 130 7.10 setjmp 和longjmp函数 132 7.10.1 自动、寄存器和易失变量 134 7.10.2 自动变量的潜在问题 136 7.11 getrlimit 和setrlimit函数 136 7.12 小结 139 习题 140 第8章 进程控制 141 8.1 引言 141...

    Linux下display环境变量的作用

    直接登陆图形界面或者登陆命令行界面后使用startx启动图形, DISPLAY环境变量将自动设置为:0:0, 此时可以打开终端, 输出图形程序的名称(比如xclock)来启动程序, 图形将显示在本地窗口上, 在终端上输入printenv查看...

Global site tag (gtag.js) - Google Analytics