您的位置:首页 > 运维架构 > Shell

深入浅出Shell编程: 前言

2012-01-21 13:25 211 查看
现在编程语言越来越多,C,C++,perl,php,Java......有点让程序员无所适从。每种语言都有其优势,在Unix/Linux平台上,Shell脚本使用非常广泛,其原因在于一群聪明人写了许多工具包,你可以直接在这些工具的基础之上,实现你自己的需求。在了解shell编程之前,先了解shell的背景。

0.1shell背景

第一个重要的shell是Bourneshell(如此命名是为了纪念此shell的发明者StevenBourne),1979年第一个流行的Unix版本7发行时,开始使用Bourneshell.Bourneshell的主档名为sh,因此,日后人们便以sh为Bourneshell的主要识别名称.虽然目前Unix上的shell有许多种,但Bourneshell的地位至今仍然没有改变.许多Unix系统中仍然使用sh做为重要的管理工具.
第一个广为流行使用的shell变种是Cshell.Cshell主要附在BSD版的Unix系统中.它的作者是柏克利大学的BillJoy.Cshell主要是因为其语法和C语言相类似,因而得名.这使得Unix系统的程式师,在学习Cshell时,感到相当地方便容易.

以上这二种形成shell的二大主流,后来的变种shell大都攫取这二种shell的优点.比如Korn,tcsh及bash.

Bashshell是GNU计划的重要工具软体之一,也是GNU作业系统中标准的shell.Bash相容于sh,因此,许多早期开发出来的Bourneshell都可以继续在bash中运作.现在我们安装好的RedhatLinux便是完全使用Bash.(/bin/sh->/bin/bash)

Bash在1988年诞生,最初的作者是BrianFox,ChetRamey於1989加入,现在官方正式的维护者是ChetRamey,他的工作便是持续不断地增强bash的功能.1995~1996期间推出bash2.0,在这之前,广为使用的版本是1.14.x,它增加了许多新的功能,以及更好的相容性.当然,Bash是完全免费的,它是OpenSource的一员,原始码全部开放.

废话少说,很多人喜欢直来直去,那么让你先看看经典的"Hello,World!"

0.2HelloWorld!

多么熟悉的字眼啊?用c语言是:

main(){printf("Hello,World!/n");}



用shell会是什么呢?很简单,你直接在你的提示符输入:BeautifierPluginError:Unabletohandle"bash"syntax.

echo"HelloWorld!";


如果是写在文件hello.sh中:BeautifierPluginError:Unabletohandle"bash"syntax.

#!/bin/sh#thisisthefirstscriptecho"HelloWorld!";


这么简单还要你讲么?(你要是这都看不懂,那我真是没法讲了)当然,这只是例行公式。Hello,World嘛,总不能太难。这里需要说明的:

养成良好的习惯,shell文件以".sh"作为后缀
注释使用"#"开头
文本的第一行一定要写成#!/bin/sh(#!后是你使用shell所在的路径)
编辑的文本要想让其运行,使用chmod+xhello.sh
运行程序./hello.sh

在shell中,分号';'是用来表示一个命令的结束,同样换行也会表示命令结束。因此,你可以在一行上写几个命令,例如:BeautifierPluginError:Unabletohandle"bash"syntax.

#!/bin/shcd/home/winter;echo"HelloWorld!";


再看看下面,我们马上要超越helloworld.

0.3超越HelloWorld

这个例子好像有些不一般。编辑文件hello2.shBeautifierPluginError:Unabletohandle"bash"syntax.

#!/bin/sh#hell2.sh--用来向用户问好。if[$#-ne1];thenecho"Usage:$0username";exit1;elseecho"HelloWorld,Hello$1!";fi


这把看懂了么?有点意思吧?下面给你解释一下:

[...]
是用来测试。
-ne表示不等于
if用于判断,和thenelse联合使用,以fi结束
$#表示参数个数
$0表示脚本名称
$1表示第一个参数。

总体意思就是:

检测参数,如果没有输入一个名字作为参数,则输出Usage信息,否则,打印HelloWord,Helloursername.试试输入:($为提示符)
BeautifierPluginError:Unabletohandle"bash"syntax.


$chmod+xhello2.sh$./hello2.shUsage:hello2.shusername$./hello2.shWinterHelloWorld,HelloWinter!


再看看被某些人称为所谓的奇技淫巧的用法:BeautifierPluginError:Unabletohandle"bash"syntax.

$echo"theresutlis$((100/25))"theresutlis4


还有BeautifierPluginError:Unabletohandle"bash"syntax.

find./-typef-execchmod777{}/;


不要性急,这些只是小菜一碟,更有意思的在后面,先看看本书结构。

0.4本书结构

本书分成3部分,每部分重点不一样。
第一部分是Shell基础,主要讲Shell命令。如果你对shell命令很是熟悉,这部分你可以先略过,但是awk和sed那部分希望你还是好好学习学习。听说awk和sed在国外大学都要学一个学期,专门的一门课。

这部分包含6章,基本覆盖了绝大多数shell命令,每个命令都有详细解释。这部分其实可以作为你Unix/Linux常用命令备查手册。我之所以写这么详细,也是希望以后自己能够参考。当然,这里一些系统管理的命令,我并没有详细记录,因为这些对于编程来说,应用稍微少一些。

在第一部分中还重点讲述了awk和sed,这是我平时使用最多的两个命令,应该说是工具,如果你要处理文本,他们可真是虎将,不要小瞧。

第二部分开始真正讲解编程了。你要是以前在学校学习过一些计算机语言,哪怕是basic都行,只要你有个概念。shell编程架构并没有太多的特别之处,它的优势在于整合各部分的资源。

这部分主要介绍,循环,条件分枝,命令行参数等,这些是在编程中,构建整个架构的基础。千万不要跟我讲用shell来面向对象编程,或者范型编程,或许可以,但肯定不是这本书能教给你的。这里的操作是最基本的最简单的,流水线设计和操作。最简单的往往是最稳定的。

第三部分是一些高级主题,前面两部分已经可以让你做很多事情了,如果你希望用shell更多功能,也希望更加炉火纯青,那么你仔细看看第三部分。你会知道如何把Shell当成一种真正的编程语言。这部分主要介绍子函数,shell脚本调试技术和正则表达式等等。

原文:/article/10190804.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: