首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

linux高级课程-用BASH编程

用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"

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

正如你所看到的,我们不必事先声明这些。这就是为什么他们被称为内置变量。它们的使用将为您节省大量时间来编写脚本。您可以在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; thenprintf "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 besidedoif [ "$SENT1" == "" ]; thenecho -e "You need to enter somethingn"continueelif [ "$SENT1" != down ]; thenecho -e "Sorry. Incorrectn"echo "1. Incorrect" >> eoiexam.datelif [ "$SENT1" == down ]; thenecho -e "Great!n"echo "No. 1 - Correct" >> eoiexam.datbreakfidone

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

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

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

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180114G0F0Q900?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券