我们首先以一个具有针对性的最新课程作为开始,随后对本书

上传人:艾力 文档编号:31358782 上传时间:2018-02-07 格式:DOC 页数:55 大小:432.50KB
返回 下载 相关 举报
我们首先以一个具有针对性的最新课程作为开始,随后对本书_第1页
第1页 / 共55页
我们首先以一个具有针对性的最新课程作为开始,随后对本书_第2页
第2页 / 共55页
我们首先以一个具有针对性的最新课程作为开始,随后对本书_第3页
第3页 / 共55页
我们首先以一个具有针对性的最新课程作为开始,随后对本书_第4页
第4页 / 共55页
我们首先以一个具有针对性的最新课程作为开始,随后对本书_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《我们首先以一个具有针对性的最新课程作为开始,随后对本书》由会员分享,可在线阅读,更多相关《我们首先以一个具有针对性的最新课程作为开始,随后对本书(55页珍藏版)》请在金锄头文库上搜索。

1、我们首先以一个具有针对性的最新课程作为开始,随后对本书中所用到的技术进行简要说明。这些说明涉及的内容非常广泛,从逐行处理文件的最快方式到 UNIX 和 shell 脚本的大小写区分。虽然没有包括脚本编程的所有方面,但却是一个很好的开端,而且给出了本书中一个主题的例子。对于在本章中列出的每个主题,在本书后面的章节中都会有一个详细的说明。我们鼓励读者完整地学习完本书。书中的每一章都使用不同方式对不同的主题进行了讨论。这样做的目的是为了强调绝不是只有一种技术可以解决 UNIX 中的问题。本书中的所有 shell脚本都是解决实际应用中某个问题的例子。读者在阅读本书时,会发现书中讨论了 UNIX 中的大

2、多数常见任务(也有一些不太常见的任务)。所有的 shell 脚本都对思考问题的过程进行了良好的解释,而且我们总是以正确的命令语法作为开始,来编写针对某个特定目的的 shell 脚本。希望读者在阅读本书时能够和我编写本书时一样感到快乐。下面让我们开始吧!1.1 区分大小写UNIX 是区分大小写的。因此,我们编写的 shell 脚本也区分大小写。1.2 UNIX 特殊字符下面所有的字符都具有特殊的意义或功能。如果它们以一种不需要其特殊意义的方式来使用,则必须进行转义(escaped)。为进行转义或去除它的特殊功能,这些字符必须在前面带有一个反斜杠,或者使用单引号括起来。 / ; , . # $ ?

3、 & * ( ) + - ! = | 1脚本编程快速入门和概述商业CHAPTER第部分 shell 脚本基础41.3 shellshell(命令行解释器 )是一个能够用来运行命令、程序和 shell 脚本的环境。shell 具有不同的版本,就像操作系统具有不同的版本一样。每种版本的 shell 都具有各自可以识别的命令集和函数集,本书使用的是 Bourne、Bash 和 Korn shell。根据 UNIX 版本和版本号的不同,shell 位于/usr/bin 目录或/bin/目录下,如表 1-1 所示。表 1-1 不同 UNIX 中 shell 所在目录shell 目录Bourne /bin

4、/sh 或/usr/bin/shBash /bin/Bash 或/usr/bin/BashKorn /bin/ksh 或/usr/bin/ksh1.4 shell 脚本shell 脚本的基本概念是一组命令,这些命令按照执行的顺序被列出。一个良好的 shell 脚本应该具有注释,注释以一个英镑符号或散列符号#作为开始,用来描述执行步骤。在 shell 脚本中可能具有条件测试(例如值 A 大于值 B),允许我们处理大量数据的循环、用文件和变量读取和存储数据,当然还可能包括函数(function)。在接下来的讨论中将编写许多脚本,因此读者从一开始就应该在脑子里有个明确的目标,一旦有了确定的目标,就可

5、以为脚本明确具体的用途,确定一系列预期的结果。在解决问题的过程中,还会发现一些技巧和窍门,当然还有思路的转变,即采用一种可能相反的方法来获得相同的结果。各种技术的选择都是灵活多变的。shell 脚本和函数都是解释型的(interpreted),这意味着它们不能被编译。shell 脚本和函数都是 ASCII 文本,可以由 shell 命令解释器读取。当执行一个 shell 脚本或函数时,命令解释器将逐行、逐个循环或逐个测试地读取所有的 ASCII 文本,并从头到尾逐行执行每条语句。1.5 函数函数的编写和 shell 脚本的编写方法非常类似,不同之处在于,在大多数情况下,函数是在 shell 脚

6、本中定义或编写的,而且在脚本中被调用。通过这种方式,可以编写一个需要多次使用的代码段,这样就可以在编写过一次后重复使用它们,不必每次都重新编写该代码,而只需调用函数即可。还可以在系统一级定义函数,这样就可以在系统环境下一直使用这个函数,但这是以后要讨论的主题。函数具有如下形式。第 1 章 脚本编程快速入门和概述商业 5function function_namecommands to execute或function_name ()commands to execute当在脚本中编写函数时,必须记住要在使用之前对其进行声明或定义。函数部分必须出现在调用函数的命令语句之前。不能调用尚不存在的函数

7、。1.6 运行 shell 脚本shell 脚本可以按照以下方式来执行。ksh shell_script_name以上命令将创建一个 Korn shell,并在新创建的 Korn shell 环境中执行 shell_script_name。这对于 sh 和 Bash shell 脚本也适用。shell_script_name如果在文件中设置执行位为 1(参见 chmod 命令的参考页面,man chmod),那么以上命令将执行 shell_script_name。脚本将在当前 shell 脚本的第一行所声明的 shell 中执行。如果在shell 脚本的第一行没有声明 shell,则脚本将在默

8、认的 shell 中执行,即用户所在系统定义的shell。在一个非预期的 shell 中执行脚本可能会导致失败或无法预料的结果。注意,一定要声明 shell。如果想对脚本的运行方式以及在哪个 shell 下运行进行完全的控制,则必须在 shell 脚本的第一行对 shell 进行声明。如果没有声明,则脚本将在默认 shell 中执行,即用户所在的系统为执行 shell 脚本定义的 shell。例如,如果脚本被编写为在 Bash shell,Bash 中运行,而默认运行 shell 脚本的 shell 为 C shell, csh,那么脚本在执行过程中很可能会出错。要声明一个 shell,必须在

9、 shell 脚本的第一行出现如表 1-2 所示的声明语句。表 1-2 声明不同类型的 shell命 令 描 述#!/bin/sh 或 #!/usr/bin/sh 声明一个 Bourne shell #!/bin/ksh 或 #!/usr/bin/ksh 声明一个 Korn shell #!/bin/csh 或 #!/usr/bin/csh 声明一个 C shell#!/bin/Bash 或#!/usr/bin/Bash 声明一个 Bourne-Again(Bash)shell 第部分 shell 脚本基础61.7 shell 脚本中的注释和风格本书始终强调脚本中要编写好的注释。在脚本的作者看

10、来直观明了的内容对于其他用户可能是晦涩难懂的。我们编写出的代码,必须便于阅读而且逻辑清晰。这涉及到编写一个易于阅读和维护的脚本,意味着必须加入大量的描述步骤的注释。大部分情况下,编写 shell 脚本的人并不负责维护脚本。而对于维护脚本的人来说,最坏的事情莫过于去揣摩其他人编写的没有注释的、根本不清楚每一步想要做什么的代码。修改他人的代码是一件非常困难的事情,因为不得不费劲地揣摩脚本作者的思路,所以有时我们会考虑干脆重新编写整个 shell 脚本。通过编写一个清晰可读的脚本,插入大量的描述作者思路以及如何使用输入、输出、变量和文件的注释,就可以避免以上的困境。命令语句的一个良好的风格是可读性强

11、,因此,有时最好将一个命令分成若干行,而不是将所有的命令或管道放在同一行。有时候,最好是创建一个长的管道,而有时使用管道及确定预期的结果对一个脚本编写新手而言可能会有困难。不管怎样,脚本中应当具有逐步描述编写者思路的注释。这样,以后需要读取这些代码的人在看到注释而理解了作者思路时将能够高兴地说“嘿,这样做真是不错!”命令的可读性和逐步骤的注释是编写一个好脚本的基础。如果在代码中使用了大量的注释,即使 6 个月之后重新阅读编写的代码,也会感觉轻松许多。相信我,一定需要重新阅读这些代码的。别忘了在编写代码时注释所有的内容,包括但不限于描述变量和文件的用途,以及循环的作用。描述每个测试,还可能包括预

12、期的结果,以及操作数据和许多数据字段的方式。当然在每行的注释之前要有一个散列符号#。下面给出的脚本 stub 位于本书网站 上,其名称为 script.stub。它具有开始编写一个 shell 脚本时所需要的所有注释。script.stub 文件可以被复制到一个新的文件中。编辑新的文件名,然后在其中编写代码。下面的程序列表 1-1 列出了 script.stub 文件。程序列表 1-1 script.stub shell 脚本开始部分#!/bin/Bash# SCRIPT: NAME_of_SCRIPT# AUTHOR: AUTHORS_NAME# DATE: DATE_of_CREATIO

13、N# REV: 1.1.A (Valid are A, B, D, T and P)# (For Alpha, Beta, Dev, Test and Production)# PLATFORM: (SPECIFY: AIX, HP-UX, Linux, OpenBSD, Solaris# or Not platform dependent)# PURPOSE: Give a clear, and if necessary, long, description of the# purpose of the shell script. This will also help you stay#

14、focused on the task at hand.# REV LIST:# DATE: DATE_of_REVISION# BY: AUTHOR_of_MODIFICATION第 1 章 脚本编程快速入门和概述商业 7# MODIFICATION: Describe what was modified, new features, etc-# set -n # Uncomment to check script syntax, without execution.# # NOTE: Do not forget to put the comment back in or# # the shell script will not execute!# set -x # Uncomment to debug this shell script# DEFINE FILES AND VARIABLES HERE# DEFINE FUNCTIONS HERE# BEGINNING OF MAIN# End of script程序列表 1-1 中显示的 shell 脚本提供了一个开始编写 shell 脚本的框架,其中包含了声明变量

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号