一、SHELL的功能及分类

SHELL是UNIX作业系统中的''命令编译器''(Command

Inter-preter),它基本上是一个常驻的执行程式,它在使用者一签入成功後就立即被载入(可在签入後以ps指令看到),主要功能则在於接受使用

者的指令、寻找命令(即档案)的所在并加以执行。因此,SHELL的不同可能直接影响使用者输入指令的方式、档案寻找的程序及速度等。

UNIX作业系统的SHELL大致可分为两大系统,一是1970年代前期由美国贝尔实验室(BELL

LAB)所发展的sh(Bourne Shell),它是UNIX系统中的标准SHELL,此一系统後来又发展出ksh(Korne

Shell)、bash(Bourne Again

Shell)等功能更多的介面;另一系统是美国柏克来大学(Berkekey)在1970年代後期所发展的csh(C

Shell),和它属於同一系统的有tcsh等。

无论上述的那一种shell,它的基本功能与作用都是相同的,它们之间的不同处可能在於对同一动作处理程序上的不同

(会影响命令处理的速度)、所提供内键命令及变数的或多或寡等,其中内部命令与变数的多寡直接影响到shell功能的多寡,是使用者在使用时最容易直接感

受到的。

在UNIX系统中,使用者可视自己的需要执行sh、ksh、bash、csh或tcsh来代替原先使用的

shell、改变正在使用的环境;也可以用''chsh''指令、输入想使用的shell的路径及名称(如/bin/csh,在Y11-Y14机器上还需

输入个人使用者的密码),改变以後每次login时所使用的shell、使自己所使用的环境能最满足自己使用上的需要。

二、SHELL 的START FILES

不管你的login

shell是那一种shell,每一个shell都有它自己的start

files,我们设定理想环境时所需使用的指令与设定的变数,都可以写在这些start

files中,在login时先後加以执行,这些start files的名称分别是:

SHELL START FILES

sh /etc/profile

$HOME/.profile

bash /etc/profile

$HOME/.profile(or $HOME/.bashrc)

csh None

$HOME/.cshrc & $HOME/.login

tcsh None

$HOME/.cshrc(or $HOME/.tcshrc)

& $HOME/.login

如果这些档案都存在,那麽它们的执行顺序将是:

1. sh系列 /etc/profile --> $HOME/.profile

2. csh系列 $HOME/.cshrc --> $HOME/.login

在这些start

files中,/etc下的profile是系统管理者为大家设定的,一般使用者无法做任何更动,如果对系统管理者的设定觉得不够或不符需要,则可在个人

帐号下的.profile、.cshrc、.login增加或修正,尤其是对csh及tcsh的使用者而言,因为在/etc下并没有start

files,所以也不会有系统管理者设定好的环境可以使用,使用者就必须自行设定所需要的所有的变数与指令,否则常会有寸步难行的感觉,最常见的如许多指

令都因找不到而不能用(因为没有设path)、键无法使用(因键的作用没有定义)...等。

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

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

1. 希望键能有作用

在$HOME/.profile或$HOME/.cshrc中加上stty erase

"^H"

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

在$HOME/.profile(sh系列)中加上

stty -istrip cs8

LC_CTYPE=ISO_8859_1

export LC_CTYPE

在$HOME/.cshrc(csh系列)中加上

stty -istrip cs8

setenv LC_CTYPE iso_8859_1

3.

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

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

在$HOME/.profile(sh系列)中加上

LANG=big5

export LANG

在$HOME/.cshrc(csh系列)中加上

setenv LANG big5

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

在sh及csh中并无法做到这个功能,而在bash及tcsh中的设定则分别是:

bash:在$HOME/.profile中加上PS1=''`PWD`> ''或

PS1="w> "

tcsh:在$HOME/.cshrc中加上set prompt=''%~> ''

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

1. stty

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

stty -a

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

istrip (-istrip)

将所有的输入截取成7 bits的资料,然而中文的资料都是8

bits的,所以当需要使用中文时,请加上''-istrip''这个叁数,以避免输入的资料被破坏。

cs7 cs8

设定每一字元的资料都是7 bits或8 bits的资料,因此在需要使用中文时,通常会有如下的设定:

stty -istrip cs8

iuclc (-iuclc)

将标准输入的大写字母视为小写(或取消)。

olcuc (-olcuc)

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

echo (-echo)

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

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

stty erase "^H"

stty kill "^U"

2. mesg y (mesg n)

若在工作时不希望被talk等讯息所打扰,可下''mesg n'' 指令,以避免外来迅息中断正要进行的工作(''mesg

y''则是恢复与外界的沟通)。

3. umask [nnn]

设定新增档案或目录的属性(mode),新档案或新目录的mode为系统管理者以create所设定的属性减去nnn,如系统管理者所设定的档案权利状态

是777,而使用者又自行设定了umask 022

则这个使用者在他个人帐号下的每一个新产生的档案的权利状态都将会是755(777-022)。

4. Function 与 Alias

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

vi(){

mesg n

/usr/ucb/vi $*

mesg y

}

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

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

alias vi ''mesg n; /usr/ucb/vi

!*; mesg y''

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

若我们在某一shell中同时建立一名称相同的function

与alias(如在bash中),则alias的执行次序优先於function 的执行。

四、常用变数设定

在UNIX环境中的变数可分为两类,一是环境变数(Enviroment

Variable)、一是shell变数(Shell

Variable),二者之间的不同处在於:环境变数不会因为shell间的更替而失去这个变数的作用,如PATH是一个环境变数,因此,即使您在设定好

PATH之後再执行另一个shell(如原来是用sh、而後在sh环境中再执行csh),PATH这个环境变数仍能继续作用,而shell变数(如csh

的cwd)则是只有在特定的shell下才有作用,一执行其他shell就失去作用。

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

1. Bourne Shell系列

[VAR]=[STRING or NUMBER]

export [VAR]

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

2. C Shell系列

set [var] = [STRING or NUMBER]

setenv [var] [STRING or NUMBER]

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

而无论是Bourne Shell或C

Shell,它们都有一些基本的、共同的常用变数,如:

1. PATH

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

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

set path=(. /bin /usr/local/bin /usr/ucb)

2. EDITOR

设定想要使用的编辑器,如

EDITOR=/usr/ucb/vi

setenv EDITOR /usr/ucb/vi

3. HOME

设定个人帐号home

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

4. SHELL

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

5. 提示符号的设定

在sh 中: PS1="[STRING]"

PS2="[STRING]"

在csh中: set prompt="[STRING]"

当然以上所列的只是使用得较为广泛的变数,若您觉得这些不够用,可用man sh、man

csh、man tcsh、man

bash指令查阅各shell的说明,在其中您将可看到各个shell所包含的变数及各变数的用法。

若不清楚某一变数的设定内容,可用''echo

$[VAR]''来观察变数的内容,如:

echo $PATH

五、SHELL 环境的异动

前面所提到start

files中的设定将在使用者login时执行,但当我们要在线上直接改变所使用的shell(如直接执行''csh''或''exec

csh'',此时不会执行start files)或是要改变设定的内容,在编修了start files或script

files之後,可利用下列指令将环境更新,而不必重新login:

. [script file] (在sh

系列的shell中)

source [script files] (在csh系列的shell中)

直接执行一个script

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

cd / (或cd [DIR])

的script

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

因script

file的执行环境是一内定或自定的subshell(可在script

file的第一行用类似''#!/bin/csh''指令加以设定),所以它的直接执行并无法真正将shell环境的工作目录切换到/,而script

file一结束,subshell即不存在、''cd

/''指令的效果也告消失;而用''.''或''source''执行则是真正将shell的工作环境下的工作目录更换到/,不会因为

scriptfile的结束而使档案中指令的效果消失。

linux脚本 set env,shell文件中set setenv source相关推荐

  1. Tips--利用shell脚本批量提取txt文件中任意字段

    利用shell脚本批量提取txt文件中任意字段 前言 0. 一个例子 1. cat命令 2. '|'符号与'>'符号 3. grep命令 4. awk命令 前言 对于测试中出现的log,我们经常 ...

  2. zypper 删除mysql_如何在 Linux 上安装/卸载一个文件中列出的软件包?

    原标题:如何在 Linux 上安装/卸载一个文件中列出的软件包? 我们可以手动去安装这些软件但是这将花费大量的时间.你可以手动安装一俩个服务器,但是试想如果你有大概十个服务器呢.在这种情况下你无法手动 ...

  3. linux字符串排序文件,Linux awk+uniq+sort 统计文件中某字符串出现次数并排序

    https://blog.csdn.net/qq_28766327/article/details/78069989 在服务器开发中,我们经常会写入大量的日志文件.有时候我们需要对这些日志文件进行统计 ...

  4. python读取日志统计ip_使用python脚本实现统计日志文件中的ip访问次数

    使用python脚本实现统计日志文件中的ip访问次数,注意此脚本只适用ip在每行开头的日志文件,需要的朋友可以参考下 适用的日志格式: 106.45.185.214 - - [06/Aug/2014: ...

  5. Linux定时任务,执行shell文件失败问题mailed 73 bytes of output but got status 0x004b#012报错解决

    Linux定时任务,执行shell文件失败问题 1 前言 最近一直被别人攻击数据库,ε=(´ο`*)))唉.又不是什么重要数据,怎么一直逮住我不放了.实在没有什么办法了,只能把数据库做做备份,将损失降 ...

  6. Linux脚本之定时清空文件内容

    Linux脚本之定时清空文件内容 一.脚本要求 二.脚本内容 三.运行脚本 一.脚本要求 1.要求创建名为rm_file.sh的脚本 2.要求在/home/tmp/下各以人名命名的临时目录,每天0点定 ...

  7. linux 文件转换ascii,linux 小技巧(查找替换文件中的ascii编码字符)

    这里纪录一些linux下用到的小技巧,以免遗忘 在linux中经常碰见各种文件处理.最常用的就是替换文件中的某些字符.常见字符替换还是很容易完成.但是有些不可见字符以及ascii编码字符等等都无法直接 ...

  8. Linux 指令:怎样从文件中找到重复行?

    Linux 指令:怎样从文件中找到重复行? 1.例如有文件test1.txt,内容如下: Hello world. 122 122 343434 222222 执行uniq -d 可以找到重复行: 1 ...

  9. linux目录下所有文件内容替换,linux替换目录下所有文件中的某字符串

    比如,要将目录/modules下面所有文件中的zhangsan都修改成lisi,这样做: sed -i "s/zhangsan/lisi/g" `grep zhangsan -rl ...

最新文章

  1. java.lang.RuntimeException: Expected one of local, maven-local, maven-central, scala-tools-releases,
  2. Docker 完全指南
  3. WPF xaml中列表依赖属性的定义
  4. petshop4.0数据库分析一:数据库概览
  5. 安卓学习之--如何关闭所有的activity
  6. 7805输入电流有要求吗_PLC输入输出接线全解析,值得收藏!
  7. java控制台输出五行字符串_java五行代码导出Excel
  8. 万创帮逆向解析,让你也能体验技术变现【Python爬虫实战系列之万创帮闲置资源整合逆向】
  9. 安装Jenkins后 启动时失败的问题解决
  10. 计算机c盘要满了电脑会卡吗,C盘满了 电脑卡顿了,怎么清理空间
  11. 程序员应该知道的Mac工具
  12. excel向下填充公式快捷键
  13. 电子实验记录本促进科研诚信建设
  14. nim语言教程(一)
  15. cf 949A Zebras
  16. python地图匹配_基于隐马尔科夫模型(HMM)的地图匹配(Map-Matching)算法
  17. 网页下载模板前台后台
  18. 斯坦福大学的低码率音频编码博士论文
  19. 写代码到底应该买什么键盘?
  20. NXP S32K146 FLEXI2C底层驱动+IAM-20680(二)

热门文章

  1. android 屏幕的放大缩小实现
  2. VC++实现获取本地主机网卡信息
  3. 360安全浏览器如何锁定极速模式
  4. linux下将多个文件去除文件头合并_Linux下把多个文件合并成一个文件 - 卡饭网...
  5. Myeclipse9.0 正式版64位JDK 之win7下的完美破解
  6. html5研究背景及意义,基于HTML5的统计图表系统的研究与设计
  7. vue中父元素点击事件与子元素点击事件冲突
  8. 洛谷P3387 【模板】缩点 题解
  9. r1音箱原生系统更改服务器,低门槛不破坏R1功能改AUX音源电脑喇叭[已更新完整]...
  10. 获取谷歌浏览器Chrome缓存目录