您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > Linux下Shell编程
Linux下Shell基础知识简介ShellShell是一种具备特殊功能的程序,它是介于使用者和UNIX/Linux操作系统之核心程序(kernel)间的一个接口。为什么我们说shell是一种介于系统核心程序与使用者间的中介者呢?读过操作系统概论的读者们都知道操作系统是一个系统资源的管理者与分配者,当您有需求时,您得向系统提出;从操作系统的角度来看,它也必须防止使用者因为错误的操作而造成系统的伤害?众所周知,对计算机下命令得透过命令(command)或是程序(program);程序有编译器(compiler)将程序转为二进制代码,可是命令呢?其实shell也是一支程序,它由输入设备读取命令,再将其转为计算机可以了解的机械码,然后执行它。各种操作系统都有它自己的Shell,以DOS为例,它的shell就是command.com檔。如同DOS下有NDOS,4DOS,DRDOS等不同的命令解译程序可以取代标准的command.com,UNIX下除了Bourneshell(/bin/sh)外还有Cshell(/bin/csh)、Kornshell(/bin/ksh)、Bourneagainshell(/bin/bash)、TenexCshell(tcsh)…等其它的shell。UNIX/Linux将shell独立于核心程序之外,使得它就如同一般的应用程序,可以在不影响操作系统本身的情况下进行修改、更新版本或是添加新的功能。Shell的激活在系统起动的时候,核心程序会被加载内存,负责管理系统的工作,直到系统关闭为止。它建立并控制着处理程序,管理内存、档案系统、通讯等等。而其它的程序,包括shell程序,都存放在磁盘中。核心程序将它们加载内存,执行它们,并且在它们中止后清理系统。Shell是一个公用程序,它在您签入时起动。藉由解译使用者输入的命令(由命令列或命令档),Shell提供使用者和核心程序产生交谈的功能。当您签入(login)时,一个交谈式的shell会跟着起动,并提示您输入命令。在您键入一个命令后,接着就是shell的工作了,它会进行:1.语法分析命令列2.处理万用字符(wildcards)、转向(redirection)、管线(pipes)与工作控制(jobcontrol)3.搜寻并执行命令当您刚开始学UNIX/Linux系统时,您大部份的时间会花在于提示符号(prompt)下执行命令。如果您经常会输入一组相同形式的命令,您可能会想要自动执行那些工作。如此,您可以将一些命令放入一个档案(称为命令档,script),然后执行该档。一个shell命令档很像是DOS下的批次檔(如Autoexec.bat):它把一连串的UNIX命令存入一个档案,然后执行该档。较成熟的命令档还支持若干现代程序语言的控制结构,譬如说能做条件判断、循环、档案测试、传送参数等。要写着写命令档,不仅要学习程序设计的结构和技巧,而且对UNIX/Linux公用程序及如何运作需有深入的了解。有些公用程序的功能非常强大(例如grep、sed和awk),它们常被用于命令档来操控命令输出和档案。在您对那些工具和程序设计结构变得熟悉之后,您就可以开始写命令档。当由命令档执行命令时,此刻,您就已经把shell当做程序语言使用了。Shell的发展历史第一个有重要意义的,标准的UNIXshell是V7(AT&T的第七版)UNIX,在1979年底被提出,且以它的创造者StephenBourne来命名。Bourneshell是以Algol这种语言为基础来设计,主要被用来做自动化系统管理工作。虽然Bourneshell以简单和速度而受欢迎,但它缺少许多交谈性使用的特色,例如历程、别名和工作控制。Cshell是在加州大学柏克来分校于70年代末期发展而成,而以2BSDUNIX的部分发行。这个shell主要是由BillJoy写成,提供了一些在标准Bourneshell所看不到的额外特色。Cshell是以C程序语言作为基础,且它被用来当程序语言时,能共享类似的语法。它也提供在交谈式运用上的改进,例如命令列历程、别名和工作控制。因为Cshell是在大型机器上设计出来,且增加了一些额外功能,所以Cshell有在小型机器上跑得较慢,即使在大型机器上跟Bourneshell比起来也显得缓慢。有了Bourneshell和Cshell之后,UNIX使用者就有了选择,且争论那一个shell较好。AT&T的DavidKorn在80年代中期发明了Kornshell,在1986年发行且在1988年成为正式的部分SVR4UNIX。Kornshell实际上是Bourneshell的超集,且不只可在UNIX系统上执行,同时也可在OS/2、VMS、和DOS上执行。它提供了和Bourneshell向上兼容的能力,且增加了许多在Cshell上受欢迎的特色,更增加了速度和效率。Kornshell已历经许多修正版,要找寻您使用的是那一个版本可在ksh提示符号下按Ctrl-v键。三种主要的Shell与其分支在大部份的UNIX系统,三种著名且广被支持的shell是Bourneshell(AT&Tshell,在Linux下是BASH)、Cshell(Berkeleyshell,在Linux下是TCSH)和Kornshell(Bourneshell的超集)。这三种shell在交谈(interactive)模式下的表现相当类似,但作为命令文件语言时,在语法和执行效率上就有些不同了。Bourneshell是标准的UNIXshell,以前常被用来做为管理系统之用。大部份的系统管理命令文件,例如rcstart、stop与shutdown都是Bourneshell的命令档,且在单一使用者模式(singleusermode)下以root签入时它常被系统管理者使用。Bourneshell是由AT&T发展的,以简洁、快速著名。Bourneshell提示符号的默认值是$。Cshell是柏克莱大学(Berkeley)所开发的,且加入了一些新特性,如命令列历程(history)、别名(alias)、内建算术、档名完成(filenamecompletion)、和工作控制(jobcontrol)。对于常在交谈模式下执行shell的使用者而言,他们较喜爱使用Cshell;但对于系统管理者而言,则较偏好以Bourneshell来做命令档,因为Bourneshell命令檔比Cshell命令档来的简单及快速。Cshell提示符号的默认值是%。Kornshell是Bourneshell的超集(superset),由AT&T的DavidKorn所开发。它增加了一些特色,比Cshell更为先进。Kornshell的特色包括了可编辑的历程、别名、函式、正规表达式万用字符(regularexpressionwildcard)、内建算术、工作控制(jobcontrol)、共作处理(coprocessing)、和特殊的除错功能。Bourneshell几乎和Kornshell完全向上兼容(upwardcompatible),所以在Bourneshell下开发的程序仍能在Kornshell上执行。Kornshell提示符号的默认值也是$。在Linux系统使用的Kornshell叫做pdksh,它是指PublicDomainKornShell。除了执行效率稍差外,Kornshell在许多方面都比Bourneshell为佳;但是,若将Kornshell与Cshell相比就很困难,因为二者在许多方面都各有所长,就效率和容易使用上看,Kornshell是优于Cshell,相信许多使用者对于CShell的执行效率都有负面的印象。在shell的语法方面,Kornshell是比较接近一般程序语言,而且它具有子程序的功能及提供较多的资料型态。至于Bourneshell,它所拥有的资料型态是三种shell中最少的,仅提供字符串变量和布尔型态。在整体考量下Kornshell是三者中表现最佳者,其次为Cshell,最后才是Bourneshell,但是在实际使用中仍有其它应列入考虑的因素,如速度是最重要的选择时,很可能应该采用Bourneshell,因它是最基本的shell,执行的速度最快。果你是习惯于Windows命令提示符的IT人,当你第一次使用Linux命令行时,一定会感到无所适从。你所熟悉的DOS命令再Linux中基本不存在。摆在你面前的是一大堆要记背的命令。一种替代方案是利用强大的Linux外壳命令编写shell脚本,让你在Linux下也能用DOS命令。下面告诉你怎么做。shell脚本编写基础从定时备份到执行简单命令,Linux的shell脚本可以执行各种功能。几乎所有的程序都可以用shell脚本来运行。在脚本中甚至可以包含一些简单的条件选择。shell脚本的基本格式如下:#!/bin/sh...Yourcommandshere...注意文件以#!/bin/sh开始。这条语句告诉操作系统用来解释脚本的程序位置。大多数系统会有/bin/sh目录,因为该目录包含root用户的标准shell程序。在大部分系统中你也可以指定/bin/bash目录。每种shell的脚本都有所不同。一些shell,比如bash,支持比标准shell更多的命令。在大多数Linux版本中sh实际上就是bash。从脚本运行命令十分简单,很像在WindowsDOS提示符下运行命令。举个例子,通过下面这段语句可以拷贝文件:#!/bin/shcpfile1file2mvfile2file3echocompletecomplete.txt自动执行命令对那些不需人工干预的任务很有用,但对一般用户来说并不那么有用。为此,shell脚本在执行过程中允许用户输入命令行参数,然后利用输入的参数运行命令。脚本中输入参数用$1到$9表示。如果你曾写过DOS批处理文件,你会发现批处理文件中也有类似功能,只是它用的是%1、%2等来代表输入参数。下面举例来说怎样使用命令行参数:#!/bin/shcp$1$2上段脚本接受2个命令行参数,第一个是要拷贝的原文件,第二个是拷贝的目标文件。运行脚本的命令格式是:./myscriptfile1file2,myscript代表脚本文件名。命令行选项也可以通过这种方式传递,如:#!/bin/shcp$1$2$3键入./copy–rsourcedirdestdir形式的命令执行上段脚本,即可递归拷贝$2目录下所有文件到$3目录下。选项$1为-r时能让cp命令递归拷贝所有文件。含条件选择的shell脚本对于不含变量的任务简单shell脚本一般能胜任。但在执行一些决策任务时,就需要包含if/then的条件判断了。shell脚本编程支持此类运算,包括比较运算、判断文件是否存在等。基本的if条件命令选项有:-eq—比较两个参数是否相等(例如,if[2–eq5])-ne—比较两个参数是否不相等-lt—参数1是否小于参数2-le—参数1是否小于等于参数2-gt—参数1是否大于参数2-ge—参数1是否大于等于参数2-f—检查某文件是否存在(例如,if[-ffilename])-d—检查目录是否存在几乎所有的判断都可以用这些比较运算符实现。脚本中常用-f命令选项在执行某一文件之前检查它是否存在。=====================================================Linux程式设计-11.ShellScript(bash)Linux程式设计-11.ShellScript(bash)--(1)简介众所皆知地,UNIX上以小工具着名,利用许多简单的小工具,来完成原本需要大量软体开发的工作,这一点特色,使得UNIX成为许多人心目中理想的系统平台。在众多的小工具中,ShellScript算得上是最基本、最强大、运用最广泛的一个。它运用围之广,不但从系统启动、程式编译、定期作业、上网连线,甚至安装整个Linux系统,都可以用它来完成。因为ShellScript是利用您平日在使用的一些指令,将之组合起
本文标题:Linux下Shell编程
链接地址:https://www.777doc.com/doc-3969157 .html