Linux Bashs Shell撰写程序实际应用介绍

运维 系统运维
如同在 Linux 中其他的 shell,Bourne Again SHell 不只是一个优秀的指令行式的 shell,同时也提供 scripting 语言。Shell scripting 允许你完全利用 shell 的功能,将需要许多指令执行的多项工作自动化。本文对Linux BASH SHELL 程式设计进行简单介绍

如同在 Linux 中其他的 shell,Bourne Again SHell 不只是一个优秀的指令行式的 shell,同时也提供 scripting 语言。Shell scripting 允许你完全利用 shell 的功能,将需要许多指令执行的多项工作自动化。在你的 Linux 机器上有许多程序是 shell 程序。如果你对学习他们如何运作,或修改他们感兴趣,基本要素是你必须了解 bash 的语法和语意。除此之外,了解 bash 语言,你能够撰写你个人专属的程序,来完成你要做的事情。

PROGRAMMING OR SCRIPTING?
对于刚开始接触程序设计的新手,常会对于 programming 和 scripting 语言间的差异感到困惑。Programming 语言通常比 Scripting 语言功能更强大,也更快速。例如:C, C++, 和 Java 都是 Programming 语言。 Programming 语言通常是从源代码 (一个包含最终程序如何执行的指令集合文字档) 开始,经过编译 (建立) 成为一个可执行档。这个可执行档不容易移植到不同的操作系统中。举例来说,如果你曾在 Linux 上写过 C 的程序,你将不能够在视窗 98 系统上执行这个 C 的程序。要这样做,你必须在视窗 98 系统之下,重新编译原始的程序码。Scripting 语言也是从源代码开始,但不需编译成可执行档。而是由一个直译器读入源代码档案里的那些指令,再执行每个指令。不幸地,直译的程序通常比编译的程序慢,因为直译器必须读入每个指令。主要的优点是,你能轻松地转换源代码档案到任何的操作系统,并且立刻以直译的方式执行。bash 是一种 scripting 语言。它对撰写小程序而言是不错的,但如果你打算开发大型的应用程序, programming 语言可能对你比较有益。其他的 scripting 语言有 Perl, Lisp 和 Tcl 等等。

WHAT DO YOU NEED TO KNOW? / 那些是你需要知道的?
撰写你自己的 shell 程序,需要知道最基本的 Linux 指令。举例来说,你应该知道要如何拷贝,移动,产生新档案等等。还有一件事你必须知道,该如何使用文书编辑程序。在 Linux 里有三个主要的文字档编辑程序 - vi, emacs 和 pico。如果对 vi 或 emacs 并不熟悉,可用 pico 或一些其他容易使用文字档编辑程序。

WARNING!!! / 警告!!!
别以 root 的身份来练习!任何情况都可能发生!若你在撰写程序时发生意外的错误,导致系统当掉,我并不负责。你已被警告过了!一定要使用没有 root 权限的一般使用者帐户。你甚至可以产生一个新的使用者,专门来练习 shell 程序设计。这样,最糟的情况只是这个使用者的目录不见了。

YOUR FIRST BASH PROGRAM / ***个 BASH 程序
我们的***个程序会是典型的 "Hello World" 程序。不要怀疑,若你已有程序设计的经验,你现在又必须头疼了。然而,这是传统,我何德何能改变传统呢?"Hello World" 程序只是将 "Hello World" 这字眼列印到萤幕上。所以赶快打开你的文字档编辑程序,键入下列的内容:

#!/bin/bash
echo "Hello World"

***行是告诉 Linux 用 bash 直译器来执行这个程序。在这个范例,bash 是位在 /bin 目录下。如果在你的系统上, bash 是在不同的目录,请对这行做适当的更改。另外,要特别说明的是,这个直译器是非常重要,所以请确定目录正确否,它告诉 Linux 哪一个直译器用来执行程序中的那些指令。下一步是把将程序存档。称它做 hello.sh 好了。完成后,你需要让此程序可以执行:

xconsole$ chmod 700 ./hello.sh

如果你不知道该如何更改档案的权限,就参考 chmod 的手册(manual page)。一旦更改完成后,你仅需输入程序的名字,就能执行了:

xconsole$ ./hello.sh
Hello World

就是这个光!就是这个光!你的***个程序完成了!真的就是这样无聊,没用,然而每个人都是这样开始的。只需记得这个程序。撰写程序码,存成档案,再用 chmod 让它可执行。

COMMANDS, COMMANDS, COMMANDS / 指令,指令,指令
你的***个程序要做什么呢?列印 "Hello World" 这两个字到萤幕上。但要怎样做呢?使用指令。在程序中写的***一行程序码是 echo "Hello World"。好吧,那一个是指令? echo。echo 程序带有一个参数,并将此参数列印到萤幕。

所谓参数是指在你所键入的程序名称之后的任何东西。在这个案例中,"Hello World" 是参数,它传进 echo 指令中。若你输入这样的指令 ls /home/root ,那么对 ls 而言, /home/root 是参数。就竟这代表什么呢?代表如果你有一支程序,可将参数列印到萤幕上,你就不需使用 echo 程序。我们假定有支称为 foo 的程序,能传入一个参数,一个字串,并且将其列印到萤幕上。我们能同样地重写我们的程序:

#!/bin/bash
foo "Hello World"

把它存档及更改存取模式(chmod),然后执行:

xconsole$ ./hello
Hello World

结果完全一样。究竟有***的程序码吗?没有。你真的能写任何程序?除非你是 echo 程序的作者。你所做的,是将 echo 程序放在你的 shell 程序内,并给一个参数。在现实的世界中,例子中 echo 指令的另一选择是 printf 指令。printf 提供比较多的控制,如果你熟悉 C 语言的程序设计就会明了。事实上,要得到完全相同的结果不必写一个 shell 程序:

xconsole$ echo "Hello World"
Hello World

bash shell 程序设计提供了多样的控制方式,而且容易学习。就如你刚看到一样,你用 Linux 指令来写你的 shell 程序了。你的 shell 程序是将其他的程序聚集在一起,来执行特定的任务。

A MORE USEFUL PROGRAM / 更有用的程序
我们将撰写一个程序,功能是移动所有的档案到一个目录内,然后删除此目录及其内容,然后再产生此目录。这可由下列的指令来完成:

xconsole$ mkdir trash
xconsole$ mv * trash
xconsole$ rm -rf trash
xconsole$ mkdir trash

不需在交谈式的 shell 上敲进所有指令,改用撰写个 shell 程序:

#!/bin/bash
mkdir trash
mv * trash
rm -rf trash
mkdir trash
echo "Deleted all files!"

把它以 clean.sh 存档,现在你所要做的是执行 clean.sh,它会移动所有的档案到一个目录,删除他们,再产生目录,而且列印一个讯息告诉你,它已成功地删除所有的档案。所以记得,如果你发现要做的某些事,要一而再,再而做三地做下去,考虑用个 shell 程序来自动执行。

COMMENTS / 注解
注解可让你的程序更容易明了,这样并不影响程序的输出结果。目的就是来特别帮你明了程序。所有在 bash 里的注解,***个字元都是用井字符号 (hash symbol):"#",除了***个行 (#!/bin/bash) 外。 ***行并不是注解。在***行之后,其馀以 "#" 开始的任何一行都是注解。看下列的程序片段:

#!/bin/bash
# 这个程序从 1 记录到 10:
for i in 1 2 3 4 5 6 7 8 9 10; do
echo $i
done

即使你不知道 bash 的程序设计,因为注解的关系,也能立刻知道上述的程序在做什么事。使用注解是很好的习惯。你将发现若未来需要维护你的程序,有注解会比较容易。

【编辑推荐】

  1. Linux Bash命令关于程序调试详解 
  2. Linux Bash命令关于快捷键应用
  3. Linux Bash Shell系统的应用详解
  4. Linux Bash具体安装步骤及使用介绍
  5. Linux Bash命令查询相关事件详解
责任编辑:chenqingxiang 来源: linux宝库
相关推荐

2009-12-18 10:58:17

Linux应用程序

2010-04-09 16:26:53

Oracle join

2010-04-27 09:28:55

绑定变量

2009-12-14 18:09:32

路由选择协议

2010-05-24 09:24:15

MySQL 备份

2010-04-21 12:35:01

Oracle导入

2010-06-24 14:08:25

Linux Cat命令

2010-06-23 16:31:10

Linux Bash

2010-03-29 11:31:45

2010-01-07 18:17:00

VB.NET连接SAP

2010-03-19 14:59:00

python Stri

2010-06-23 17:16:33

Linux Bash

2010-04-15 09:36:42

2010-03-17 15:58:08

Python环境

2010-04-23 11:15:43

Oracle创建

2010-06-23 16:05:36

Linux Bash

2010-03-23 18:20:26

Python os.g

2023-07-27 17:41:02

BashZshFish

2009-12-25 09:49:32

LinuxShell编程运行Shell程序

2016-12-02 13:43:44

shell应用Linux
点赞
收藏

51CTO技术栈公众号