您好,欢迎访问三七文档
当前位置:首页 > 财经/贸易 > 资产评估/会计 > 第六章shell基础
第六章:shell基础目标完成这一章,你能够作以下事情:了解shell的工作原理描述用户登录的过程描述用户环境变量和这些环境变量的功能。设置和修改shell变量。了解和修改一些特殊的环境变量例如PATH,TERM等等。为特定的应用定制用户环境变量。6.1什么是shell?shell是一个交互性命令解释器。Shell独立于操作系统,这种设计让用户可以灵活选择适合自己需要的shell。shell让你在命令行键入命令,经过shell解释后传送给操作系统(内核)执行。这一章介绍POSIXshell提供的交互的特征。以下是shell功能的一个汇总:查找命令的位置并且执行相关联的程序为shell变量赋新值执行命令替代处理I/O重定向和管道功能提供一个解释性的编程语言界面,包括tests,branches和loops等语句当你登录到一个unix系统,shell会为你的终端登录线索定义一些特征,然后出现你的提示符。在POSIX,Bourn,Kshell中$符号为默认的提示符。Cshell中默认的提示符是%号。6.2一些通常使用的shell/usr/bin/shPOSIXshell/usr/bin/kshKornshell/usr/old/bin/shBourneshell/usr/bin/cshCshell/usr/bin/keyshAcontest-sensitivesoftkeyshell/usr/bin/rkshRestrictedKornshell/usr/bin/rshRestrictedBourneshellPOSIXshell、是一个POSIX兼容的命令编程语言和命令解释器。它可以从终端或者是一个文件中读取并且执行命令。POSIX在许多方面同kornshell相似。有历史机制。支持任务控制,和其他有用的特性。Kornshell同POSIXshell十分类似,是由贝尔试验室的DavidKorn开发的。Bourneshell:缺乏许多在POSIX,和kornshell中的功能。它是由StephenR.Bourne开发的,是AT&Tunix中最先使用的shellCshell。是一个普通的语言解释器,有命令历史机制,类似C语言的语法。和任务控制工具。它是由universityofCaliforniaatBerkeley的williamJoy开发的。Rsh和rksh是Bourneshell和Kornshell的受限制的版本。受限制的shell在设置登录名和环境的时候比普遍的shell有更多的限制。受限制的shell使用起来就象是具有异常现象的标准的shell。使用受限制的shell的用户不能:更改目录重新设定PATH变量的值在路径名中使用/符号。重定向输出。6.3POSIXshell的特性POSIXshell是unix提供的shell中的一个。这种shell有许多Kornshell拥有,但Bourneshell没有的特征。即使你不会使用到所有的高级特征,你仍然会发现POSIXshell是一个非常方便的用户界面。以下是POSIXshell的一些特性:命令的历史机制。命令行重调用和编辑任务控制。文件名自动完成。命令的别名。增强的cd。先进的编程能力。6.4别名别名就是命令的一个新的名称。使用别名可以缩短长命令行输入,创建新的命令,或用一种称为别名的新的命令来替代原始的命令执行。别名的组成可以是一个字母或一个短的单词。例如,许多的人非常频繁地使用ps–ef命令。如果你使用psf代替这个命令是否会更容易一些?你使用alias命令可以创建别名:$aliasname=string在这里,name是你要取的别名,而string是name要取代的命令或者字符串。如果string包括有空格,你要需用引号将整个字符串括起来。别名对于减少键盘输入,减少打字错误,或是创建新的命令会很方便。别名在使用的时候和其他的命令一样。执行一个真的的unix系统命令和执行引用到一个unix命令的别名对于用户来说是透明的,没有任何区别。别名经常用于全路径名的一个缩写。如果不带差数,alias命令会报告当前定义的所有的别名。想要列出一个特定的别名,使用aliasname命令。禁止一个别名,可以使用unalias命令,语法是:unaliasname例子:$aliasgo=’cd’$aliasthere=/home/user3/tree/ford/sports$gothere$pwd/home/user3/tree/ford/sports6.5文件名自动完成例子:$morefraescesc$morefrankenstein$moreabcescesc$moreabcdefesc=1)abcdefx1mnopabcdefy1mnop$moreabcdef然后打x或y,然后连续按两下esc键系统就会自动完成相关联的文件名。当你想要存取一个长文件名的时候,你可以使用文件名自动完成功能,如果你输入的字符足够多,能唯一标识一个文件名后,你可以连续敲两下esc键,POSIXshell就会自动补全文件名的剩余部分。如果输入的字符串并不唯一,POSIXshell就不能解析到文件名,你的终端会发出蜂鸣。直到没有文件名冲突时候,连续敲两下esc键,shell会自动完成文件名。你也可以通过敲一下esc键来列出所有可能的文件名。在POSIXshell列出了有效的选项的时候,你就能够使用编辑命令来增加后来的字符来唯一地确定你所需要的文件名,然后你可以连续敲两下esc键来完成文件名。文件名自动完成可以在所有的使用文件名路径的时候使用,例如:$cdtrescescdoescescrescesc会显示以下的命令行:$cdtree/dog.breeds/retriever6.5命令的历史机制语法:history[-n|az]显示以前输入的命令。例子:$history–2列出最近输入的两个命令cdmore.profile$history35列出命令号从3到5的所有的命令datepwdlsPOSIXshell保留一个历史文件来存储你所键入的命令,你可以重输入这些命令。这个历史文件会在你登录时建立,在退出登录时被删除。history命令会显示你最近输入的16个命令,每一个命令前面都会有一个命令号。你可以通过这个命令号来引用你以前键入的命令。你可以键入history–n来显示少于或者多于16个命令。其中n代表命令号。你可以键入historyaz来显示一个命令号的范围。其中az代表命令号的一个范围。HISTSIZE变量定义了保存的的历史命令的数目。(默认值是128)HISTFILE变量定义了保存历史命令的文件的一个文本文件名(默认值是.sh_history).6.6重新输入命令你可以通过简单地键入rc来从命令历史中运行任意的命令。其中c代表命令号。你也可以键入命令的第一个字母来执行你最近键入的命令,例如:$history1date2catfile13ls–l$rdMonJul410:03:1319946.7用户环境语法:env例子:$envHOME=/home/gerryPWD=/home/gerry/develop/hasicsEDITOR=viTERM=70092......PATH=/usr/bin:/usr/contrib/bin:/usr/local/bin:/home/gerry/bin用户环境记录了关于用户程序的线程的许多信息。你的环境中的信息有:你home路径的路径名电子邮件的存放地址你所在地的时区你登录的用户名shell查找命令的路径终端类型你的应用可能需要的其他东西。例如:命令vi和more需要知道你的终端类型才能以正确的格式输出数据。与用户环境类似的是你的办公环境。在办公室里的灯光,声音,和温度对所有的工作者都是相同的。而其他的对你来说唯一的因素组成了你的特殊的环境。这些因素包括你正在执行的工作,你的写字台的布局,和你和办公室其他人的关系。你的工作环境就像你的用户环境一样都是唯一的。许多应用需要你按照一些方式来定制你的环境。这种定制是通过修改你的.profile文件来完成的。你可以运行env命令来检查你的环境。这个命令会显示你的环境中的每一个变量和变量的值。每一个环境变量的设置都有一个的意义,以下是一些普通的环境变量和它们的含义:TERM,COLUMNS,LINESHOMEhome目录的路径PATHLOGNAMEENV,HISTFILEPOSIXshell变量DISPLAYxwindows变量在这些变量中,一些是系统设置的变量,其他都是在/etc/profile或.profile中设置。6.8设置SHELL变量shell变量是一个名称,代表一个值与这个名称管关联的值可以被修改一些shell变量是在登录的过程中定义的。用户可以自己定义新的shell变量语法:name=vales例子:$PATH=/usr/bin/X11:/usr/binshell变量同代数中的变量很相似。它是代表一个数值。给一个变量赋值就是将一个数值分配到一个变量名上。然后就可以通过这个变量名来存取这个数值。如果这个值被修改,仍然能够通过变量名来存取新的值。给shell变量赋值的语法是:name=value你可以在终端的shell提示符下输入,或者在shell脚本中加入这条语句。注意,在等号(=)的前后都没有空格。区别shell变量的名称和shell变量的值十分重要。当一个赋值语句执行的时候,变量的值才会被设定例如TERM=70092这会告诉shell记住TERM这个名称,并且在TERM变量的值被要求的时候,返回70092。变量名限制变量名必须由字母开始可以包含字母,数字。下划线,变量名所包含的字符的数量没有限制。6.9两个重要的变量PATH变量shell搜寻你键入的命令所在位置的一个目录的列表TERMb变量$envPATH=/usr/bin:/usr/contrib/bin:/usr/local/bin$TERM=70092$$tsetEraseisBackspacekillisCtrl+U$PATH变量是shell在寻找命令所要查找的路径的一个列表。它使我们可以简单地键入一个命令名而不需要在前面加上一个完整的一个路径列表。(例如,vi代表/usr/bin/vi)。以下是一个默认的PATH变量的例子:PATH=/usr/bin:/usr/contrib/bin:/usr/local/bin这意味着当你键入一个命令的时候,shell会在路径/usr/bin中查找,然后是/usr/contrib/bin,等等,直到找到这个命令,或者找完这些目录都没有发现这个命令。如果没有找到这个命令,会有一个command:notfound的错误信息出现在屏幕上。TERM是一个描述你的终端类型的环境变量。为了许多的命令能正确运行,它们需要知道你使用的终端类型。例如,ls命令需要屏幕有多少列,更多的需要知道屏幕有多少行,vi为了正确地工作,同时需要知道你的终端的行与列的数目和关于你的终端更多的信息。终端的类型被设置成为终端的型号的数字。(例如2392,70092,等等)设置终端变量的默认方法是使用以下的方法:TERM=(hp)你的系统管理员也许已经设置好你的系统,所以系统不会询问你的终端类型。在这种情况下你可以使用env命令来检查TERM环境变量的值。如果你使用的工作站只有一个显示器,TERM变量的值就很可能是正确的,不需要更改。如果你的终端在你使用more或者vi的时候出现异常,请检查TERM变量,如果设置正确,执行tset命令。这个命令会使用TERM变量中的值来重新设定你的终端类型。6.10常用的变量赋值黑体字为你要定义的变量。EDITOR=/usr/bin/vivi作为行编辑器ENV=$HOME/.shrcshell启动的时候执行$HOME/.shrc文件FCEDIT=/usr/bin/vivi编辑线索。HOME=/home/user3~(波浪符号)POSIXshell中等同于你的HOME目录HISTFILE=$HOME/.sh_hi
本文标题:第六章shell基础
链接地址:https://www.777doc.com/doc-2157897 .html