Bash基本语法
- 格式:pdf
- 大小:518.70 KB
- 文档页数:20
1BASH 的历史和概貌∙BASH 是什么的缩写∙Linux 中的其他 Shell∙BASH 的主要特点为什么要学习 BASH 编程呢?因为 BASH 是每个 Linux 发行版都带有的一个标准基础软件,所以学会在 BASH 下编制一些小程序就可以让你对 Linux 系统的管理应付自如;其次 BASH 非常简单,如果不深究 BASH 语法中的细节的话,你可以用 1 个小时就学会他,应该说 BASH 比 HTML 要更容易学;最后即使你不打算用 BASH 编程,但是 Linux 系统中的许多配置文件和脚本都是 BASH 的语法,不懂一点 BASH 的知识就不能很好的理解和使用 Linux 。
其实最简单的BASH 就和 DOS 下的批处理文件类似,只要把要执行的命令一行一行写出来就行。
1.1BASH 是什么的缩写BASH = GNU Bourne-Again SHell,BASH 是 GNU 组织开发和推广的一个项目,不过也有一种风趣的说法认为 BASH = Born-Again Shell。
BASH 是 Linux 操作系统上的一个 Shell,是由 /bin/bash 解释执行的。
BASH 支持 IEEE POSIX P1003.2/ISO 9945.2 脚本语言工具标准。
1.2Linux 系统中的其他 ShellShell 的概念是从 UNIX 系统中引用过来的,在 Linux 和 UNIX 系统里现在存在这多种不同的 Shell 可以使用。
最常用的几种是Bourne shell (sh)C shell (csh)Korn shell (ksh)三种shell 都有它们的优点和缺点:Bourne shell 的作者是 Steven Bourne,它是 UNIX 最初使用的 Shell 并且在每种 UNIX 上都可以使用。
Bourne Shell 在 Shell 编程方面相当优秀,但在处理与用户的交互方面作得不如其他几种 Shell;C Shell 由 Bill Joy 所写,它更多的考虑了用户界面的友好性,支持象命令补齐(command-line completion)等一些 Bourne Shell 所不支持的特性,普遍认为C shell 的编程接口做的不如 Bourne Shell,但 C Shell 还是被很多 C 程序员使用,因为 C Shell 的语法和 C 语言很相似,这也是 C Shell 名称的由来;Korn Shell (ksh) 由 Dave Korn 所写,它集合了 C Shell 和 Bourne Shell 的优点并且和 Bourne Shell 完全兼容。
除了这些 Shell 以外,许多其他的 Shell 程序吸收了这些原来的 Shell 程序的优点而成为新的 Shell 。
在 Linux 上常见的有 tcsh (csh 的扩展),Bourne Again shell(bash, sh 的扩展), 和Public Domain Korn shell (pdksh, ksh 的扩展)。
BASH 是大多数 Linux 系统的缺省 Shell。
BASH 只是 Linux 操作系统上的一种 Shell,虽然他是一个比较优秀和主流的 Shell,但是针对不同用户的不同需要和喜好,在 Linux 操作系统上还有几种其他的 Shell,如:ksh、csh、zsh 等。
1.3BASH 的主要特点Bourne Again shell (bash), 正如它的名字所暗示的,是 Bourne shell 的扩展。
BASH 与 Bourne shell 完全向后兼容,并且在 Bourne shell 的基础上增加和增强了很多特性。
BASH 也包含了很多 csh 和 Korn Shell 里的优点,使得BASH 有很灵活和强大的编程接口,同时又有很友好的用户界面。
为什么要用BASH 来代替 sh 呢?Bourne Shell 最大的缺点在于它处理用户的输入方面,在Bourne shell 里键入命令会很麻烦,尤其当你键入很多相似的命令时,而 BASH 准备了几种特性使命令的输入变得更容易。
BASH 的新功能包括命令补齐、通配符、命令历史记录、别名等。
BASH 是一种解释执行的语言,我们还见过其他一些解释性的语言,如 BASIC 语言、Perl 语言、TCL/TL 等等。
解释执行的语言的与编译型语言(如 C 语言)的最大不同就在于运行速度和使用方便程度上。
BASH 和后面我们要讲解的 Perl 语言都是解释性语言,他们编写起来很方便,也很快捷,但是由于是解释执行,所以运行速度和效率必将大打折扣。
故而今天介绍的 BASH 和 Perl 这两种解释性语言最好的用途就是一些用于完成特定功能的常用的小工具或小程序,对于一些大型的项目、计算复杂的工程或有高级需求的应用还是用 C 语言甚至汇编语言比较好。
下面给出一些 BASH 所不适用的范围:资源型敏感,对 CPU 负担重的程序复杂的大项目需要灵活处理文件的程序,BASH 只能逐行读出文件进行处理需要图形用户界面的程序需要直接与系统硬件打交道的程序需要访问 I/O 端口和网络套接字的程序需要使用库或和以前的其他代码整合的程序如果遇到上面这些程序,我们推荐最好用其他编程语言,如:Perl, Tcl, Python 或者直接用 C, C++, Java 。
2 BASH 的基本语法∙最简单的例子—— Hello World!∙关于输入、输出和错误输出∙BASH 中对变量的规定(与 C 语言的异同)∙BASH 中的基本流程控制语法∙函数的使用2.1最简单的例子—— Hello World!几乎所有的讲解编程的书给读者的第一个例子都是 Hello World 程序,那么我们今天也就从这个例子出发,来逐步了解 BASH。
用 vi 编辑器编辑一个 hello 文件如下:#!/bin/bash# This is a very simple exampleecho Hello World这样最简单的一个 BASH 程序就编写完了。
这里有几个问题需要说明一下:一,第一行的 #! 是什么意思二,第一行的 /bin/bash 又是什么意思三,第二行是注释吗四,echo 语句五,如何执行该程序#! 是说明 hello 这个文件的类型的,有点类似于 Windows 系统下用不同文件后缀来表示不同文件类型的意思(但不相同)。
Linux 系统根据 "#!" 及该字串后面的信息确定该文件的类型,关于这一问题同学们回去以后可以通过 "man magic"命令及 /usr/share/magic 文件来了解这方面的更多内容。
在 BASH 中第一行的 "#!" 及后面的 "/bin/bash" 就表明该文件是一个 BASH 程序,需要由 /bin 目录下的 bash 程序来解释执行。
BASH 这个程序一般是存放在 /bin 目录下,如果你的 Linux 系统比较特别,bash 也有可能被存放在 /sbin 、/usr/local/bin 、/usr/bin 、/usr/sbin 或 /usr/local/sbin 这样的目录下;如果还找不到,你可以用 "locate bash" "find / -name bash 2> /dev/null" 或"whereis bash" 这三个命令找出 bash 所在的位置;如果仍然找不到,那你可能需要自己动手安装一个 BASH 软件包了。
第二行的 "# This is a ..." 就是 BASH 程序的注释,在 BASH 程序中从“#”号(注意:后面紧接着是“!”号的除外)开始到行尾的多有部分均被看作是程序的注释。
的三行的 echo 语句的功能是把 echo 后面的字符串输出到标准输出中去。
由于 echo 后跟的是 "Hello World" 这个字符串,因此 "Hello World"这个字串就被显示在控制台终端的屏幕上了。
需要注意的是 BASH 中的绝大多数语句结尾处都没有分号。
如何执行该程序呢?有两种方法:一种是显式制定 BASH 去执行:$ bash hello 或$ sh hello (这里 sh 是指向 bash 的一个链接,“lrwxrwxrwx 1 root root 4 Aug 20 05:41 /bin/sh -> bash”)或者可以先将 hello 文件改为可以执行的文件,然后直接运行它,此时由于hello 文件第一行的 "#! /bin/bash" 的作用,系统会自动用/bin/bash 程序去解释执行 hello 文件的:$ chmod u+x hello$ ./hello此处没有直接“$ hello”是因为当前目录不是当前用户可执行文件的默认目录,而将当前目录“.”设为默认目录是一个不安全的设置。
需要注意的是,BASH 程序被执行后,实际上 Linux 系统是另外开设了一个进程来运行的。
2.2关于输入、输出和错误输出在字符终端环境中,标准输入/标准输出的概念很好理解。
输入即指对一个应用程序或命令的输入,无论是从键盘输入还是从别的文件输入;输出即指应用程序或命令产生的一些信息; Linux 系统下还有一个标准错误输出的概念,这个概念主要是为程序调试和系统维护目的而设置的,错误输出于标准输出分开可以让一些高级的错误信息不干扰正常的输出信息,从而方便一般用户的使用。
在 Linux 系统中:标准输入(stdin)默认为键盘输入;标准输出(stdout)默认为屏幕输出;标准错误输出(stderr)默认也是输出到屏幕(上面的 std 表示standard)。
在 BASH 中使用这些概念时一般将标准输出表示为 1,将标准错误输出表示为 2。
下面我们举例来说明如何使用他们,特别是标准输出和标准错误输出。
输入、输出及标准错误输出主要用于 I/O 的重定向,就是说需要改变他们的默认设置。
先看这个例子:$ ls > ls_result$ ls -l >> ls_result上面这两个命令分别将 ls 命令的结果输出重定向到 ls_result 文件中和追加到 ls_result 文件中,而不是输出到屏幕上。
">"就是输出(标准输出和标准错误输出)重定向的代表符号,连续两个 ">" 符号,即 ">>" 则表示不清除原来的而追加输出。