您好,欢迎访问三七文档
当前位置:首页 > 中学教育 > 初中教育 > 第三章Shell操作与简易编程
Shell是Linux系统下的命令解释器,也是使用Linux系统的主要环境,Shell的功能很多,本章主要从Shell的基本概念、Shell的种类、Shell中的特殊字符、重定向以及Shell程序几个方面来讲解,重点内容是Shell的特殊字符和Shell编程。一、什么中shell用户登录进入Linux系统时,可以进入基于XWindow的图形视窗系统:KDE。当然很多工作可以在图形环境下完成,但是在服务器应用环境下的很多情况需要远程连接到服务器进行管理配置,而且使用命令行模式进行管理更加方便和简单,因此学习Linux,Shell的学习和使用是必不可少的一部分。如果系统设置为不自动启动图形接口,那么用户登录以后得到的就是一个等待输入命令的Shell提示符,标识了可以开始发出命令;如果系统设置为自动启动图形系统,那么用户可以在单击【开始】→【ThizMenu即时菜单】→【简体中文终端机(GB2312)】运行终端仿真程序,在命令提示符后面输入任何命令及参数,如图3-1所示。图3-1运行终端类比程序用户登录或运行终端类比程序时,实际进入了Shell。那么,Shell是什么呢?确切一点说,Shell就是一个命令行解释器,它的作用就是遵循一定的语法将输入的命令加以解释并传给系统。它为用户提供了一个向Linux发送请求以便运行程序的接口系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它互动式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包括循环和分支。它虽然不是Linux系统内核的一部分,但它调用了系统内核的大部分功能来执行程序、创建文档并以并行的方式协调各个程序的运行。因此,对于用户来说,Shell是最重要的实用程序,深入了解和熟练掌握Shell的特性极其使用方法,是用好Linux系统的关键。可以说,Shell使用的熟练程度反映了用户对Linux使用的熟练程度。当用户使用Linux时是通过命令来完成所需工作的。一个命令就是用户和Shell之间对话的一个基本单位,它是由多个字符组成并以换行结束的字串。Shell解释用户输入的命令,就像DOS里的command.com一样不同的是,在DOS中,command.com只有一个,而在Linux下比较流行的Shell有好几个,每个Shell都各有千秋。一般的Linux系统都将bash作为默认的Shell。二、几种流行的Shell目前流行的Shell有ash,bash,ksh,csh,zsh等,你可以用下面的命令来查看你自己的Shell类型:#echo$SHELL$SHELL是一个环境变量,它记录用户所使用的Shell类型。你可以用命令:#Shell-name来转换到别的Shell,这里Shell-name是你想要尝试使用的Shell的名称,如ash等。这个命令为用户又启动了一个Shell,这个Shell在最初登录的那个Shell之后,称为下级的Shell或子Shell。使用命令:#exit可以退出这个子Shell。使用不同的Shell的原因在于它们各自都有自己的特点,下面做一个简单的介绍:1.ashashShell是由KennethAlmquist编写的,是Linux中占用系统资源最少的一个小Shell,它只包含24个内部命令,因而使用起来很不方便。2.bashbash是Linux系统默认使用的Shell,它由BrianFox和ChetRamey共同完成,是BourneAgainShell的缩写,内部命令一共有40个。Linux使用它作为默认的Shell是因为它有以下的特色:(1)可以使用类似DOS下面的doskey的功能,用上下方向键查阅和快速输入并修改命令。(2)自动通过查找匹配的方式,给出以某字串开头的命令。(3)包含了自身的帮助功能,你只要在提示符下面键入help就可以得到相关的帮助。3.kshksh是KornShell的缩写,由EricGisin编写,共有42条内部命令。该Shell最大的优点是几乎和商业发行版的ksh完全相容,这样就可以在不用花钱购买商业版本的情况下尝试商业版本的性能了。4.cshcsh是Linux比较大的内核,它由以WilliamJoy为代表的共计47位作者编成,共有52个内部命令。该Shell其实是指向/bin/tcsh这样的一个Shell,也就是说,csh其实就是tcsh。5.zchzch是Linux最大的Shell之一,由PaulFalstad完成,共有84个内部命令。如果只是一般的用途,是没有必要安装这样的Shell的。三、Shell基础命令行中输入的第一个字必须是一个命令的名字,第二个字是命令的选项或参数,命令行中的每个字必须由空格或Tab隔开,格式如下:$命令选项参数选项是包括一个或多个字母的代码,它前面有一个减号(减号是必要的,Linux用它来区别选项和参数),选项可用于改变命令执行的动作的类型。例如:[root@startroot]#lsanaconda-ks.cfgDesktopGNUsteppic这是没有选项的ls命令,可列出当前目录中的所有文档,但只列出各个文档的名字,而不显示其他更多的信息。[root@startroot]#ls-ltotal16-rw-r--r--1rootroot128210月10日2002anaconda-ks.cfgdrwx------4rootroot40963月17日15:53Desktopdrwxr-xr-x3rootroot409610月10日2002GNUstepdrwxr-xr-x3rootroot40963月17日16:29pic加入-l选项,将会对每个文档列出详细信息,诸如资料大小和资料最后被修改的时间等。大多数命令都被设计为可以接纳参数。参数是在命令行中的选项之后键入的一个或多个单词,例如[root@startroot]#ls-lpictotal760-rw-r--r--1rootroot744023月17日10:091.jpg-rw-r--r--1rootroot640943月17日10:332.jpg-rw-r--r--1rootroot552933月17日10:433.jpgpasswd将显示pic目录下的所有文档及其信息。有些命令,如ls可以带参数,而有一些命令可能需要一些最小数目的参数。例如,cp命令至少需要两个参数,如果参数的数目与命令要求不符,Shell将会报错。例如:[root@startroot]#cpanaconda-ks.cfg/tmp/注意:命令中选项应该先于参数输入。命令行实际上是可以编辑的一个文本缓冲区,在按回车之前,可以对输入的文本进行编辑。比如利用【BackSpace】键可以删除刚键入的字符,可以进行整行删除,还可以插入字符,使得用户在输入命令(尤其是复杂命令)时,若出现键入错误,无需重新输入整个命令,只要利用编辑操作,即可改正错误。利用上箭头可以重新显示刚执行的命令,利用这一功能可以重复执行以前执行过的命令,而无需重新键入该命令。bash保存着以前键入过的命令的列表,该列表被称为命令历史表。按动上箭头,便可以在命令行上逐次显示各条命令。同样,按动下箭头可以在命令列表中向下移动,这样可以将以前的各条命令显示在命令行上,用户可以修改并执行这些命令。在一个命令行中还可以置入多个命令,用分号将各个命令隔开,这些命令将按顺序执行。例如:[root@startroot]#date;ls日3月1716:56:35CST2002anaconda-ks.cfgDesktopGNUsteppic也可以在几个命令行中输入一个命令,用反斜杠将一个命令行持续到下一行。如:$cp-i\mydata\newdata上面的cp命令分3行输入的,开始的两行以反斜杠结束,把第3行作为一个命令行。Shell中除使用普通字符外,还可以使用一些具有特殊含义和功能的特殊字符。在使用它们时应注意其特殊的含义和作用范围。下面分别对这些特殊字符加以介绍。四、Shell特殊字符通配符通配符用于模式匹配,如文件名匹配、路径名搜索、字串查找等。常用的通配符有(*),(?)和括在方括号[]中的字符序列。用户可以在作为命令参数的文件名中包含这些通配符,构成一个所谓的“模式串”,以在执行过程中进行模式匹配。*代表任何字串(长度可以不等),例如:f*匹配以f打头的任意字串。但应注意,文件名前的圆点(.)和路径名中的斜线(/)必须显式匹配。例如“*”不能匹配.file,而“.*”才可以匹配.file。?代表任何单个字符。[]代表指定的一个字符范围,只要文件名中[]位置处的字符在[]中指定的范围之内,那么这个文件名就与这个模式串匹配。方括号中的字符范围可以由直接给出的字符组成,也可以由表示限定范围的起始字符、终止字符及中间的连字符(-)组成。例如,f[a-d]与f[abcd]的作用相同。Shell将把与命令行中指定的模式串相匹配的所有文件名都作为命令的参数,形成最终的命令,然后再执行这个命令。表3-1说明这些通配符的具体含义。表3-1通配符的含义模式串含义*当前目录下所有文档的名称*Text*当前目录下所有文件名中包含有Text的文件的名称[ab-dm]*当前目录下所有以a,b,c,d,m开头的文件的名称[ab-dm]?当前目录下所有以a,b,c,d,m开头且后面只跟有一个字符的文件的名称/usr/bin/??目录/usr/bin下所有名称为两个字符的文件的名称特别需要注意的是,连字符(-)仅在方括号内有效,表示字符范围,如在方括号外面就成为普通字符了。而“*”和“?”只在方括号外面是通配符,若出现在方括号之内,它们也失去通配符的能力,成为普通字符了。例如,模式-a[*?]abc中只有一对方括弧是通配符,“*”和“?”均为普通字符,因此,它匹配的字串只能是-a*abc和-a?abc。最后说明一下使用通配符时需要注意的一些问题。由于“*”,“?”和[]对于Shell来说具有比较特殊的意义,因此在正常的文件名中不应出现这些字符。特别是在目录名中不要出现它们,否则Shell匹配起来可能会无穷递归下去。另外要注意的一点是:如果目录中没有与指定的模式串相匹配的文件名,那么Shell将使用此模式串本身作为参数传给有关命令。这可能就是命令中出现特殊字符的原因所在。引号在Shell中引号分为3种:单引号,双引号和反引号。1.单引号由单引号括起来的字符都作为普通字符出现。特殊字符用单引号括起来以后,也会失去原有意义,而只作为普通字符解释。例如:#string='$PATH'#echo$string#PATH可见,$保持了其本身的含义,作为普通字符出现。2.双引号由双引号括起来的字符,除$,\,'和这几个字符仍是特殊字符并保留其特殊功能外,其余字符仍作为普通字符对待。对于$来说,就是用其后指定的变量值来代替这个变量和$;对于\而言,是转义字符,它告诉Shell不要对其后面的那个字符进行特殊处理,只当做普通字符即可。可以想见,在双引号中需要在前面加上\的只有4个字符$,\,'和本身。而对号,若其前面没有加\,则Shell会将它同前一个号匹配。例如,我们假定PATH的值为.:/usr/bin:/bin,输入如下命令:#String=$PATH\\\\$PATH#echo$TestString.:/usr/bin:/bin\$PATH读者可以自己试一下在第二个双引号之前不加\会产生什么结果。3.反引号反引号(`)字符所对应的键一般位于键盘的左上角,不要将其同单引号(')混淆。反引号括起来的字串被Shell解释为命令行,在执行时,Shell首先执行该命令行,并以它的标准输出结果取代整个反引号(包括两个反引号)部分。例如:#pwd/home/xyz#string=currentdirectoryis`pwd`#echo$stringc
本文标题:第三章Shell操作与简易编程
链接地址:https://www.777doc.com/doc-2212144 .html