余晖落尽暮晚霞,黄昏迟暮远山寻
本站
当前位置:网站首页 > 编程知识 > 正文

Linux 编程快速入门

xiyangw 2023-05-14 11:32 14 浏览 0 评论

编程工具

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

Linux 编程快速入门

我的主目录中有一个子目录,用于存放 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 <Michael.Jordan@linux.org>
* Created at:    Tue Nov 29 20:13:14 2005
* Modified by:  Michael Jordan <Michael.Jordan@linux.org>
* Modified at:  Tue Nov 29 22:58:56 2005
********************************************************************/

实际上,您可以在此标头中添加更多信息。只需查阅 auto-header.el 文件本身中的注释以获取更多信息。

编程语言和 Linux

是可用于 Linux 的编程语言编译器的虚拟大杂烩。只有著名的gcc 编译器本身将为C++、Fortran 和 ADA 编写的代码以及解释 Java 代码创建二进制文件。对于其他流行的编程语言,如 Pascal、COBOL 和 Lisp,有免费可用的编译器。正如你所看到的,真的太多了,无法深入了解所有这些。此外,无论如何,这位作家无法在绝大多数情况下进行编程。但在本课中,我们将研究一些在 Linux 下运行的最常见的脚本语言。

使用 BASH 编程

听起来可能是这样,但 BASH 并不是蝙蝠侠和罗宾在 60 年代旧电视节目中与坏人战斗时出现的字幕之一(连同 Ooff!和 Biff!)。BASH 实际上代表 Bourne Again Shell。这个名字的原因可以追溯到为 Unix 编写原始 Bourne Shell 的 Steve Bourne。当 GNU 创建一个等效的自由软件时,他们以史蒂夫的外壳命名它,并在他的姓氏上加了一个双关语。
如果您是系统管理员,那么制作 BASH 脚本将是其中一项强制性工作。但远不是一件苦差事,你会发现它会让你的工作和生活变得更轻松。

我们的第一个 BASH脚本

BASH 脚本需要的第一件事就是众所周知的“shebang”。这是两个字符:

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

如果您的默认 shell 是 BASH,则该行:

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

从那里开始,您可以自由地做外壳允许的事情。为管理目的而创建的 Shell 脚本(大多数脚本)由调用其他命令的行组成。让我们看一个简单的例子。假设您的系统上有电子邮件用户,但您没有配额。尽管如此,您仍想监控邮箱的大小,以确保人们不会占用过多的空间。这个脚本,从 crontab 运行,可以很好地解决问题:
除了 shebang,注释行以 # 开头

代码:

#!/bin/sh
 
# show us the size of email spools email spools
 
# date in YYYY-MM-DD format
today=`date +%Y-%m-%0e`;
 
# subject and recipient variables
subject="Mailcheck";
sendto="admin@linux.ork";
 
cd /var/spool/mail
 
ls -lSh | awk '{print $5, $9}' | grep "(G|M)" | mail -s $subject-$today $sendto
 
# end script

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

首先,脚本更改为邮件假脱机所在的目录。脚本执行带有选项的“ls”,并显示一个列表,其中最大的线轴首先显示,其大小以人类可读的格式显示。这通过管道传送到 awk,后者对大小和用户名进行排序。awk 输出为那些以兆字节和千兆字节为单位的假脱机。然后将其通过管道传送到“邮件”命令并发送到管理员帐户,其中包含主题以及我们在这些变量中声明的日期。然后,管理员将在 /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.ork
Your home directory is: /home/mike
penguin.linux.ork is running linux-gnu

如您所见,我们不必事先声明任何这些。这就是为什么它们被称为内置变量。它们的使用将为您节省大量编写脚本的时间。您可以在GNU BASH 参考手册

交互式脚本中

找到完整的内置变量列表

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

代码:

#!/bin/sh
 
echo -n "Enter the name of a city: "
read CITY
echo -n "$CITY is "
case $CITY in
London | 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

如您所见,我们已经声明了一个变量,该变量将取决于用户在被提示输入城市名称时输入的内容。之后,我们为每种情况提供了几种选择。如果用户输入我们在这里设想的城市名称,他/她将收到关于城市在哪里的消息。如果不是,脚本将显示一条消息,它不知道城市在哪里。任何答案都由星号 (*) 表示

确保您拥有所需
的内容 如果您必须操作文件的内容,最好先检查该文件是否存在。这是一个使用 if 命令执行此操作的简单 BASH 例程:

代码:

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

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

If Loops: A Practical Example

我做了 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”例程来整理不正确的答案。您还会注意到它会将结果(无论是否正确)写入文件。
如果您从事教学行业,则可以对此进行扩展,为您的学生提供快速测验。

相关推荐

辞旧迎新,新手使用Containerd时的几点须知

相信大家在2020年岁末都被Kubernetes即将抛弃Docker的消息刷屏了。事实上作为接替Docker运行时的Containerd在早在Kubernetes1.7时就能直接与Kubelet集成使...

分布式日志系统ELK+skywalking分布式链路完整搭建流程

开头在分布式系统中,日志跟踪是一件很令程序员头疼的问题,在遇到生产问题时,如果是多节点需要打开多节点服务器去跟踪问题,如果下游也是多节点且调用多个服务,那就更麻烦,再者,如果没有分布式链路,在生产日志...

Linux用户和用户组管理

1、用户账户概述-AAA介绍AAA指的是Authentication、Authorization、Accounting,即认证、授权和审计。?认证:验证用户是否可以获得权限,是3A的第一步,即验证身份...

linux查看最后N条日志

其实很简单,只需要用到tail这个命令tail-100catalina.out输入以上命令,就能列出catalina.out的最后100行。...

解决linux系统日志时间错误的问题

今天发现一台虚拟机下的系统日志:/var/log/messages,文件时间戳不对,跟正常时间差了12个小时。按网上说的执行了servicersyslogrestart重启syslog服务,还是不...

全程软件测试(六十二):软件测试工作如何运用Linux—读书笔记

从事过软件测试的小伙们就会明白会使用Linux是多么重要的一件事,工作时需要用到,面试时会被问到,简历中需要写到。对于软件测试人员来说,不需要你多么熟练使用Linux所有命令,也不需要你对Linux...

Linux运维之为Nginx添加错误日志(error_log)配置

Nginx错误日志信息介绍配置记录Nginx的错误信息是调试Nginx服务的重要手段,属于核心功能模块(nginx_core_module)的参数,该参数名字为error_log,可以放在不同的虚机主...

Linux使用swatchdog实时监控日志文件的变化

1.前言本教程主要讲解在Linux系统中如何使用swatchdog实时监控日志文件的变化。swatchdog(SimpleWATCHDOG)是一个简单的Perl脚本,用于监视类Unix系统(比如...

syslog服务详解

背景:需求来自于一个客户想将服务器的日志转发到自己的日志服务器上,所以希望我们能提供这个转发的功能,同时还要满足syslog协议。1什么是syslog服务1.1syslog标准协议如下图这里的fa...

linux日志文件的管理、备份及日志服务器的搭建

日志文件存放目录:/var/log[root@xinglog]#cd/var/log[root@xinglog]#lsmessages:系统日志secure:登录日志———————————...

运维之日志管理简介

日志简介在运维过程中,日志是必不可少的东西,通过日志可以快速发现问题所在。日志分类日志分类,对不同的日志进行不同维度的分析。操作系统日志操作系统是基础,应用都是在其之上;操作系统日志的分析,可以反馈出...

Apache Log4j 爆核弹级漏洞,Spring Boot 默认日志框架就能完美躲过

这两天沸沸扬扬的Log4j2漏洞门事件炒得热火朝天:突发!ApacheLog4j2报核弹级漏洞。。赶紧修复!!|Java技术栈|Java|SpringBoot|Spring...

Linux服务器存在大量log日志,如何快速定位错误?

来源:blog.csdn.net/nan1996jiang/articlep/details/109550303针对大量log日志快速定位错误地方tail/head简单命令使用:附加针对大量log日志...

Linux中查看日志文件的正确姿势,求你别tail走天下了!

作为一个后端开发工程师,在Linux中查看查看文件内容是基本操作了。尤其是通常要分析日志文件排查问题,那么我们应该如何正确打开日志文件呢?对于我这种小菜鸡来说,第一反应就是cat,tail,vi(或...

分享几款常用的付费日志系统,献给迷茫的你!

概述在前一篇文章中,我们分享了几款免费的日志服务器。他们各有各的特点,但是大家有不同的需求,有时免费的服务器不能满足大家的需要,下面推荐几款付费的日志服务器。1.Nagios日志服务器Nagio...

取消回复欢迎 发表评论: