现在编程语言越来越多,C, C++, perl, php, Java ...... 有点让程序员无所适从。每种语言都有其优势,在Unix/Linux平台上,Shell脚本使用非常广泛,其原因在于一群聪明人写了许多工具包,你可以直接在这些工具的基础之上,实现你自己的需求。在了解shell编程之前,先了解shell的背景。
0.1 shell 背景
第一个重要的 shell 是 Bourne shell (如此命名是为了纪念此 shell 的发明者 Steven Bourne), 1979 年第一个流行的 Unix 版本 7 发行时, 开始使用 Bourne shell. Bourne shell 的主档名为 sh, 因此, 日后人们便以 sh 为 Bourne shell 的主要识别名称. 虽然目前Unix 上的 shell 有许多种, 但 Bourne shell 的地位至今仍然没有改变. 许多 Unix 系统中仍然使用 sh 做为重要的管理工具.第一个广为流行使用的 shell 变种是 C shell. C shell 主要附在 BSD 版的 Unix 系统中. 它的作者是柏克利大学的 Bill Joy. C shell 主要是因为其语法和 C 语言相类似, 因而得名. 这使得 Unix 系统的程式师, 在学习 C shell 时, 感到相当地方便容易.
以上这二种形成 shell 的二大主流, 后来的变种 shell 大都攫取这二种 shell 的优点. 比如 Korn, tcsh 及 bash.
Bash shell 是 GNU 计划的重要工具软体之一, 也是 GNU 作业系统中标准的 shell.Bash 相容于 sh, 因此, 许多早期开发出来的 Bourne shell 都可以继续在 bash 中运作. 现在我们安装好的 Redhat Linux 便是完全使用 Bash. (/bin/sh -> /bin/bash)
Bash 在 1988 年诞生, 最初的作者是 Brian Fox, Chet Ramey 於 1989 加入, 现在官方正式的维护者是 Chet Ramey, 他的工作便是持续不断地增强 bash 的功能. 1995~1996 期间推出 bash 2.0 , 在这之前, 广为使用的版本是 1.14.x, 它增加了许多新的功能, 以及更好的相容性. 当然, Bash 是完全免费的, 它是 Open Source 的一员, 原始码全部开放.
废话少说,很多人喜欢直来直去,那么让你先看看经典的"Hello, World!"
0.2 Hello World!
多么熟悉的字眼啊?用c语言是:main() { printf("Hello, World!/n"); }
echo "Hello World!";
#!/bin/sh #this is the first script echo "Hello World!";
- 养成良好的习惯,shell文件以".sh"作为后缀
- 注释使用"#"开头
- 文本的第一行一定要写成 #!/bin/sh (#!后是你使用shell所在的路径)
- 编辑的文本要想让其运行,使用chmod +x hello.sh
- 运行程序 ./hello.sh
#!/bin/sh cd /home/winter ; echo "Hello World!" ;
再看看下面,我们马上要超越hello world.
0.3 超越Hello World
这个例子好像有些不一般。编辑文件hello2.sh BeautifierPlugin Error: Unable to handle "bash" syntax.#!/bin/sh #hell2.sh -- 用来向用户问好。 if [ $# -ne 1 ] ; then echo "Usage: $0 username"; exit 1; else echo "Hello World, Hello $1 !"; fi
这把看懂了么?有点意思吧?下面给你解释一下:
[...]
是用来测试。- -ne 表示不等于
- if 用于判断,和then else 联合使用,以 fi 结束
- $# 表示参数个数
- $0 表示脚本名称
- $1 表示第一个参数。
检测参数,如果没有输入一个名字作为参数,则输出Usage 信息,否则,打印 Hello Word, Hello ursername . 试试输入:($为提示符) BeautifierPlugin Error: Unable to handle "bash" syntax.
$ chmod +x hello2.sh $ ./hello2.sh Usage: hello2.sh username $ ./hello2.sh Winter Hello World, Hello Winter!
再看看被某些人称为所谓的奇技淫巧的用法: BeautifierPlugin Error: Unable to handle "bash" syntax.
$ echo "the resutl is $(( 100 / 25 ))" the resutl is 4
还有 BeautifierPlugin Error: Unable to handle "bash" syntax.
find ./ -type f -exec chmod 777 {} /;
不要性急,这些只是小菜一碟,更有意思的在后面,先看看本书结构。
0.4 本书结构
本书分成3部分,每部分重点不一样。第一部分是Shell基础,主要讲Shell命令。如果你对shell命令很是熟悉,这部分你可以先略过,但是awk 和sed 那部分希望你还是好好学习学习。听说awk 和sed 在国外大学都要学一个学期,专门的一门课。
这部分包含6章,基本覆盖了绝大多数shell 命令,每个命令都有详细解释。这部分其实可以作为你 Unix/Linux 常用命令备查手册。我之所以写这么详细,也是希望以后自己能够参考。当然,这里一些系统管理的命令,我并没有详细记录,因为这些对于编程来说,应用稍微少一些。
在第一部分中还重点讲述了awk 和 sed,这是我平时使用最多的两个命令,应该说是工具,如果你要处理文本,他们可真是虎将,不要小瞧。
第二部分开始真正讲解编程了。你要是以前在学校学习过一些计算机语言,哪怕是basic都行,只要你有个概念。shell编程架构并没有太多的特别之处,它的优势在于整合各部分的资源。
这部分主要介绍,循环,条件分枝,命令行参数等,这些是在编程中,构建整个架构的基础。千万不要跟我讲用shell 来面向对象编程,或者范型编程,或许可以,但肯定不是这本书能教给你的。这里的操作是最基本的最简单的,流水线设计和操作。最简单的往往是最稳定的。
第三部分是一些高级主题,前面两部分已经可以让你做很多事情了,如果你希望用shell更多功能,也希望更加炉火纯青,那么你仔细看看第三部分。你会知道如何把Shell当成一种真正的编程语言。这部分主要介绍子函数,shell脚本调试技术和正则表达式等等。
原文:http://blog.csdn.net/csu_whm/article/details/1408055