Bash 实例,第二部分更多的 bash 基本编程
2008-03-06 12:26
323 查看
更多的 bash 基本编程 |
Daniel Robbins (drobbins@gentoo.org), 总裁兼 CEO, Gentoo Technologies, Inc. 2000 年 4 月 01 日 在前一篇 bash 的介绍性文章中,Daniel Robbins 为您讲解了脚本语言的一些基本元素和使用 bash 的原因。在本文(即第二部分)中,Daniel 继续前一篇的内容,并讲解条件 (if-then) 语句、循环和更多的 bash 基本结构。 我们先看一下处理命令行自变量的简单技巧,然后再看看 bash 基本编程结构。 接收自变量 在 介绍性文章 中的样本程序中,我们使用环境变量 "$1" 来引用第一个命令行自变量。类似地,可以使用 "$2"、"$3" 等来引用传递给脚本的第二和第三个自变量。这里有一个例子:
有时需要一次引用 所有 命令行自变量。针对这种用途,bash 实现了变量 "$@",它扩展成所有用空格分开的命令行参数。在本文稍后的 "for" 循环部分中,您将看到使用该变量的例子。
如果您曾用过如 C、Pascal、Python 或 Perl 那样的过程语言编程,则一定熟悉 "if" 语句和 "for" 循环那样的标准编程结构。对于这些标准结构的大多数,Bash 有自己的版本。在下几节中,将介绍几种 bash 结构,并演示这些结构和您已经熟悉的其它编程语言中结构的差异。如果以前编程不多,也不必担心。我提供了足够的信息和示例,使您可以跟上本文的进度。
如果您曾用 C 编写过与文件相关的代码,则应该知道:要比较特定文件是否比另一个文件新需要大量工作。那是因为 C 没有任何内置语法来进行这种比较,必须使用两个 stat() 调用和两个 stat 结构来进行手工比较。相反,bash 内置了标准文件比较运算符,因此,确定“/tmp/myfile 是否可读”与查看“$myvar 是否大于 4”一样容易。 下表列出最常用的 bash 比较运算符。同时还有如何正确使用每一选项的示例。示例要跟在 "if" 之后。例如:
大多数时候,虽然可以不使用括起字符串和字符串变量的双引号,但这并不是好主意。为什么呢?因为如果环境变量中恰巧有一个空格或制表键,bash 将无法分辨,从而无法正常工作。这里有一个错误的比较示例:
好了,已经讲了条件语句,下面该探索 bash 循环结构了。我们将从标准的 "for" 循环开始。这里有一个简单的例子:
还可以在字列表中使用多个通配符、甚至是环境变量:
虽然所有通配符扩展示例使用了 绝对路径,但也可以使用相对路径,如下所示:
在学习另一类型的循环结构之前,最好先熟悉如何执行 shell 算术。是的,确实如此:可以使用 shell 结构来执行简单的整数运算。只需将特定的算术表达式用 "$((" 和 "))" 括起,bash 就可以计算表达式。这里有一些例子:
只要特定条件为真,"while" 语句就会执行,其格式如下:
"Until" 语句提供了与 "while" 语句相反的功能:只要特定条件为 假 ,它们就重复。下面是一个与前面的 "while" 循环具有同等功能的 "until" 循环:
Case 语句是另一种便利的条件结构。这里有一个示例片段:
在 bash 中,甚至可以定义与其它过程语言(如 Pascal 和 C)类似的函数。在 bash 中,函数甚至可以使用与脚本接收命令行自变量类似的方式来接收自变量。让我们看一下样本函数定义,然后再从那里继续:
经常需要在函数中创建环境变量。虽然有可能,但是还有一个技术细节应该了解。在大多数编译语言(如 C)中,当在函数内部创建变量时,变量被放置在单独的局部名称空间中。因此,如果在 C 中定义一个名为 myfunction 的函数,并在该函数中定义一个名为 "x" 的自变量,则任何名为 "x" 的全局变量(函数之外的变量)将不受它的印象,从而消除了负作用。 在 C 中是这样,但在 bash 中却不是。在 bash 中,每当在函数内部创建环境变量,就将其添加到 全局名称空间。这意味着,该变量将重写函数之外的全局变量,并在函数退出之后继续存在:
在这个简单的例子中,很容易找到该错误,并通过使用其它变量名来改正错误。但这不是正确的方法,解决此问题的最好方法是通过使用 "local" 命令,在一开始就预防影响全局变量的可能性。当使用 "local" 在函数内部创建变量时,将把它们放在 局部名称空间中,并且不会影响任何全局变量。这里演示了如何实现上述代码,以便不重写全局变量:
我们已经学习了最基本的 bash 功能,现在要看一下如何基于 bash 开发整个应用程序。下一部分正要讲到。再见! 参考资料 您可以参阅本文在 developerWorks 全球站点上的 英文原文. 阅读介绍性的 bash 文章, developerWorks上的“ Bash 实例,第 1 部分” 访问 GNU's bash 主页 查看 bash online reference manual 关于作者
|
相关文章推荐
- Bash 实例,第 2 部分:更多的 bash 基本编程
- Bash 实例,第 2 部分-更多的 bash 基本编程
- Bash 实例,第 2 部分更多的 bash 基本编程
- Bash 实例,第 2 部分:更多的 bash 基本编程
- Bash 实例,第 1 部分:Bourne again shell (bash) 基本编程
- Bash 实例,第 1 部分:Bourne again shell (bash) 基本编程
- Windows核心编程学习笔记 第二部分 完成编程任务 第6章 线程的基本知识
- Bash 实例,第二部分
- Bash 实例,第一部分 Bourne again shell (bash) 基本编程
- Bash 实例,第一部分Bourne again shell (bash) 基本编程
- Bash 实例,第一部分---Bourne again shell (bash) 基本编程
- Bash 实例,第一部分-Bourne again shell (bash) 基本编程
- BASH 实例 第二部分
- Bash 实例,第一部分 Bourne again shell (bash) 基本编程
- Bash 实例,第二部分
- Bash 实例,第 3 部分
- Windows核心编程学习笔记 第二部分 完成编程任务 第8章 用户模式下的线程同步
- shell脚本编程教程之二 --- 基本的shell编程格式+简单的脚本实例
- Bash 实例,第 2 部分
- 《初入linux》--第二部分-系统结构与基本文件管理