编程工具 冒着与Vi爱好者展开激烈战争的风险,我是无条件的Emacs粉丝。对我来说,Emacs是进行任何类型的编程工作的理想编辑器。Emacs有几个附加组件可以让您的生活更轻松。其中之一是EspenSkoglund的autoheader。el。这将为您的代码文件创建一个标题,Emacs将自动填充必要的信息。每次您进行更改时,它也会更新标题。这对我来说真的很方便。 我的主目录中有一个子目录,用于存放emacs零碎物品。我只是将autoheader。el放在这个目录中,然后像这样修改了我的。emacs文件: 代码:(addtolistloadpathelisp)(requireautoheader) autoheader。el文件的一部分定义了用于不同编程语言的注释区域的字符。该文件的标题需要位于源代码文件开头的注释区域内。该文件包含20种不同的编程语言,但我经常使用的PHP却不见了。所以我只是在Perl和Postscript之间为它添加了一个条目: 代码:(perlmode。())(phpmode。())(postscriptmode。()) 现在,我的文件以一个不错的自动更新标题开头,如下所示: 代码:Filename:listing。phpDescription:ScripttoliststuffAuthor:MichaelJordanMichael。Jordanlinux。orgCreatedat:TueNov2920:13:142005Modifiedby:MichaelJordanMichael。Jordanlinux。orgModifiedat:TueNov2922:58:562005 实际上,您可以在此标头中添加更多信息。只需查阅autoheader。el文件本身中的注释以获取更多信息。 编程语言和Linux 是可用于Linux的编程语言编译器的虚拟大杂烩。只有著名的gcc编译器本身将为C、Fortran和ADA编写的代码以及解释Java代码创建二进制文件。对于其他流行的编程语言,如Pascal、COBOL和Lisp,有免费可用的编译器。正如你所看到的,真的太多了,无法深入了解所有这些。此外,无论如何,这位作家无法在绝大多数情况下进行编程。但在本课中,我们将研究一些在Linux下运行的最常见的脚本语言。 使用BASH编程 听起来可能是这样,但BASH并不是蝙蝠侠和罗宾在60年代旧电视节目中与坏人战斗时出现的字幕之一(连同Ooff!和Biff!)。BASH实际上代表BourneAgainShell。这个名字的原因可以追溯到为Unix编写原始BourneShell的SteveBourne。当GNU创建一个等效的自由软件时,他们以史蒂夫的外壳命名它,并在他的姓氏上加了一个双关语。 如果您是系统管理员,那么制作BASH脚本将是其中一项强制性工作。但远不是一件苦差事,你会发现它会让你的工作和生活变得更轻松。 我们的第一个BASH脚本 BASH脚本需要的第一件事就是众所周知的shebang。这是两个字符: 在此之后,您应该包含BASH解释器的路径。所以你的脚本的第一行应该是这样的: 如果您的默认shell是BASH,则该行: 做同样的事情。它只是到binbash的符号链接。但是如果你的默认shell不是BASH,那么如果你用第一行编写一个shell脚本,你就不会调用binbash。因为在Linux系统上,BASH通常是默认的shell,你会看到大多数BASH脚本以 从那里开始,您可以自由地做外壳允许的事情。为管理目的而创建的Shell脚本(大多数脚本)由调用其他命令的行组成。让我们看一个简单的例子。假设您的系统上有电子邮件用户,但您没有配额。尽管如此,您仍想监控邮箱的大小,以确保人们不会占用过多的空间。这个脚本,从crontab运行,可以很好地解决问题: 除了shebang,注释行以开头 代码:!binshshowusthesizeofemailspoolsemailspoolsdateinYYYYMMDDformattodaydateYm0e;subjectandrecipientvariablessubjectMailcheck;sendtoadminlinux。ork;cdvarspoolmaillslShawk{print5,9}grep(GM)mailssubjecttodaysendtoendscript 首先,您会看到我们已经声明了一些变量。这些变量在声明时不以任何字符为前缀,但在使用时以美元符号()为前缀。您还注意到变量可以是其他命令,如本例中的date命令。当您将命令用作变量时,它必须放在反引号()内。 首先,脚本更改为邮件假脱机所在的目录。脚本执行带有选项的ls,并显示一个列表,其中最大的线轴首先显示,其大小以人类可读的格式显示。这通过管道传送到awk,后者对大小和用户名进行排序。awk输出为那些以兆字节和千兆字节为单位的假脱机。然后将其通过管道传送到邮件命令并发送到管理员帐户,其中包含主题以及我们在这些变量中声明的日期。然后,管理员将在varspoolmail中得到一个使用最多空间的排序列表。 内置变量 虽然我们在前面的示例中创建了自己的变量,但BASH还附带了所谓的内置不变量。 代码:!binshechoYouareuserUIDonHOSTNAMEechoYourhomedirectoryis:HOMEechoHOSTNAMEisrunningOSTYPE 此脚本的输出应产生类似于以下内容: 代码:Youareuser500onpenguin。linux。orkYourhomedirectoryis:homemikepenguin。linux。orkisrunninglinuxgnu 如您所见,我们不必事先声明任何这些。这就是为什么它们被称为内置变量。它们的使用将为您节省大量编写脚本的时间。您可以在GNUBASH参考手册 交互式脚本中 找到完整的内置变量列表 虽然我们提到BASH脚本的主要用途是自动执行管理任务,但有时您可能需要用户与脚本进行交互。如果你想让用户输入信息,你需要使用变量read。让我们看一下下面的例子: 代码:!binshechonEnterthenameofacity:readCITYechonCITYiscaseCITYinLondonParisBerlinRome)echoninEurope;;NewYorkChicagoWashington)echoninTheUSA;;TokyoBejingBangalore)echoninAsia;;)echonsomeplacebutIdontknowwhere;;esac 如您所见,我们已经声明了一个变量,该变量将取决于用户在被提示输入城市名称时输入的内容。之后,我们为每种情况提供了几种选择。如果用户输入我们在这里设想的城市名称,他她将收到关于城市在哪里的消息。如果不是,脚本将显示一条消息,它不知道城市在哪里。任何答案都由星号()表示 确保您拥有所需 的内容如果您必须操作文件的内容,最好先检查该文件是否存在。这是一个使用if命令执行此操作的简单BASH例程: 代码:!binshiftestfvarlogmail。log;thenprintfThefileexistsn;fi 这是一个好主意,因为如果您将脚本设置为操作不存在的文件,它将使您的脚本无用。 IfLoops:APracticalExample 我做了12年的全职英语外语教师,所以我忍不住给你这个使用BASH脚本的多项选择测试的例子。 代码:!binshPS3Choosethenumberofthecorrectwordtofillintheblank:echoTheemergencybrakeletgoandcarrolledthehillselectSENT1inupdownalongbesidedoif〔SENT1〕;thenechoeYouneedtoentersomethingncontinueelif〔SENT1!down〕;thenechoeSorry。Incorrectnecho1。Incorrecteoiexam。datelif〔SENT1down〕;thenechoeGreat!nechoNo。1Correcteoiexam。datbreakfidone 该脚本使用elif例程来整理不正确的答案。您还会注意到它会将结果(无论是否正确)写入文件。 如果您从事教学行业,则可以对此进行扩展,为您的学生提供快速测验。