linux高级课程-在Linux中编程

编程工具

在与Vi爱好者展开激烈战争的风险中,我是一个无条件的Emacs粉丝。对我来说,Emacs是做任何编程工作的理想编辑器。有几个Emacs的附件可以让你的生活变得更轻松。其中之一是Espen Skoglund的auto-header.el。这将为您的代码文件创建一个头文件,Emacs将自动填充必要的信息。每次进行更改时都会更新标题。这对我来说真的很方便。

我有一个在我的主目录emacs赔率和结束的子目录。我只是把auto-header.el放在这个目录下,然后像下面这样修改我的.emacs文件:

码:

(add-to-list 'load-path "~/elisp/")(require 'auto-header)

auto-header.el文件的一部分定义了用于不同编程语言的注释区域的字符。该文件的标题需要位于源代码文件开头的注释区域内。该文件包括20种不同的编程语言,但我使用了很多PHP,所以我在Perl和Postscript之间添加了一个条目:

码:

(perl-mode . ("#" "" "##" "#"))(php-mode . ("/*" "*/" " *" "*"))(postscript-mode . ("%" "" "%%" "%"))

现在,我的文件以一个很好的自动更新标题开始,如下所示:

码:

/********************************************************************** Filename: listing.php* Description: Script to list stuff* Author: Michael Jordan * Created at: Tue Nov 29 20:13:14 2005* Modified by: Michael Jordan * Modified at: Tue Nov 29 22:58:56 2005********************************************************************/

其实,你可以添加更多的信息到这个头。只需查阅auto-header.el文件中的注释以获取更多信息。

编程语言和Linux

这是一个可用于Linux的编程语言编译器的虚拟大杂烩。只有着名的gcc编译器本身将为用C ++,Fortran和ADA编写的代码创建二进制文件,并解释Java代码。有免费的编译器为其他流行的编程语言,如Pascal,COBOL和Lisp。正如你所看到的,真的有太多的东西可以深入到所有这些中。而且,这个作者绝大多数都不能编程。但在本课中,我们将看到一些在Linux下运行的最常用的脚本语言。

用BASH编程

虽然听起来可能听起来像这样,但当蝙蝠侠和罗宾在60年代的电视节目中与坏人作战时,BASH并不是那种与Ooff和Biff一起弹出的字幕。BASH实际上代表Bourne Again Shell。这个名字的原因可以追溯到为Bourne编写Unix原始版本的Steve Bourne。当GNU创建了一个自由软件的等价物时,他们用Steve的shell命名,并在他的姓氏上加了一点点双关。

如果你是一个系统管理员,使BASH脚本将是这些强制性的东西之一。但是,这不是一件难事,你会发现它将使你的工作和生活变得更加简单。

我们的第一个BASH脚本

BASH脚本所需要的第一件事是谚语“shebang”。这是两个字符:

码:

#!

在此之后,你应该包括BASH解释器的路径。所以你的脚本的第一行应该是这样的:

码:

#!/bin/bash

如果您的默认shell是BASH,那么:

码:

#!/bin/sh

做同样的事情。这只是一个到/ bin / bash的符号链接。但是,如果您的默认shell不是BASH,那么如果您使用第一行编写shell脚本,则不会调用/ bin / bash。由于在Linux系统上,BASH通常是默认的shell,所以你会看到大多数的BASH脚本开始

码:

#!/bin/sh

从那里开始,你可以自由地做外壳允许的事情。为管理目的而创建的Shell脚本(这是大部分脚本)由调用其他命令的行组成。我们来看一个简单的例子。假设您的系统上有电子邮件用户,但您没有配额。尽管如此,你还是要监视邮箱的大小,以确保人们不会占用更多的空间。这个脚本,从crontab运行,将很好地做到这一点:

除了shebang,注释行开始于#

码:

首先,你会看到我们已经声明了一些变量。这些变量在声明时没有用任何字符作为前缀,但在使用时它们的前缀是美元符号($)。你也注意到变量可以是其他命令,就像这个例子中的date命令一样。当你使用一个命令作为变量时,它必须放在反引号内(``)。

首先,脚本更改为邮件假脱机所在的目录。脚本执行带有选项的'ls',并显示一个列表,其中最大的后台打印程序首先显示,其大小以可读格式显示。这是通过awk来处理的,它将大小和用户名分开。awk输出被grepped为兆字节和千兆字节的那些假脱机。然后通过管道传递给“邮件”命令并发送到管理员帐户,并在主题上添加我们在这些变量中声明的日期。然后管理员将有一个很好的排序清单,谁在/ var / spool / mail中使用最多的空间。

在变量中构建

虽然我们在前面的例子中创建了自己的变量,但是BASH也带有被称为构建的不变量的东西。

码:

#!/bin/sh echo "You are user $UID on $HOSTNAME"echo "Your home directory is: $HOME"echo "$HOSTNAME is running $OSTYPE"

这个脚本的输出应该会产生类似于这样的内容:

码:

You are user 500 on penguin.linux.orkYour home directory is: /home/mikepenguin.linux.ork is running linux-gnu

正如你所看到的,我们不必事先声明这些。这就是为什么他们被称为内置变量。它们的使用将为您节省大量时间来编写脚本。您可以在GNU BASH参考手册中找到完整的内置变量列表。

交互式脚本

虽然我们提到BASH脚本的主要用途是自动执行管理任务,但有些时候您需要用户与脚本交互。如果你想要一个用户输入信息,你需要使用变量读取。我们来看看下面的例子:

码:

#!/bin/sh echo -n "Enter the name of a city: "read CITYecho -n "$CITY is "case $CITY inLondon Paris Berlin Rome) echo -n "in Europe";;'New York' Chicago Washington) echo -n "in The USA";;Tokyo Bejing Bangalore) echo -n "in Asia";;*) echo -n "some place - but I don't know where";;esac

正如你所看到的,我们已经声明了一个变量,这取决于用户在提示城市名称时输入的内容。之后,我们对每个案例都有几个选项。如果用户输入我们在这里设想的城市的名字,他/她将被告知关于城市在哪里。否则,脚本将显示一条消息,表示不知道城市在哪里。任何答案都以星号(*)表示

确保你有你需要的东西

如果你必须操纵一个文件的内容,最好先检查一下这个文件是否存在。这是一个简单的BASH例程,使用if命令来执行此操作:

码:

#!/bin/sh if test -f /var/log/mail.log; then printf "The file existsn"; fi

这是一个好主意,因为如果你设置了一个不存在的文件,它将会使你的脚本无用。

如果循环:一个实际的例子

我是一个全职的英语作为一个外语老师12年,所以我不能拒绝给你这个使用BASH脚本的多选题测试的例子。

码:

#!/bin/sh PS3="Choose the number of the correct word to fill in the blank: "echo "The emergency brake let go and car rolled ______ the hill" select SENT1 in up down along beside do if [ "$SENT1" == "" ]; then echo -e "You need to enter somethingn" continue elif [ "$SENT1" != down ]; then echo -e "Sorry. Incorrectn" echo "1. Incorrect" >> eoiexam.dat elif [ "$SENT1" == down ]; then echo -e "Great!n" echo "No. 1 - Correct" >> eoiexam.dat break fi done

脚本使用“elif”例程来排列不正确的答案。您还会注意到它将结果(无论是否正确)写入文件。

如果你在教学专业,你可以扩大这个,让你的学生快速测验。

关注吕田论坛获取更多资讯

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180114G0F0RF00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励