如何系统地学习Shell编程?

步骤/方法

数据库管理系统

PostgreSQL、Oracle、Microsoft SQL Server、Informix等专业耐用的数据库管理系统通过存储过程或存储函数提供脚本功能。也许最广泛认可的语言选项是Microsoft SQL Server和Sybase使用的TransactSQL,以及Oracle使用的PL/SQL。PostgreSQL提供了一个名为PL/pgSQL的类似PL/SQL的程序来扩展为SQL,但它也提供了一系列其他语言的选择,包括PL/Perl、PL/Python、PL/Ruby和PL/Tcl。

虽然这种编程机会仅限于一组特定的问题领域,但如果您是DBA(数据库管理员)或者您的工作涉及数据库开发报告,它将非常有用。

插件组件

很多新的电脑游戏都提供了编写和加载插件的功能。比如《魔兽世界》提供了一个使用Lua脚本语言的外挂系统。随着Firefox的流行和广泛使用,现代web浏览器通常提供灵活的插件系统。最简单的情况是,Firefox插件是用JavaScript编写的。开源浏览器在插件开发上往往比闭源浏览器更有吸引力,而Chrome浏览器的插件系统很可能成为插件开发者的第二大目标,这是因为谷歌Chrome高调的营销策略和无限制的授权政策。

许多其他应用程序都有插件和扩展系统,这可以为培养这些快速发展的编码技能提供充足的机会,甚至包括一些终端模拟器和基于控制台的文本编辑器,如Vim。(告诉我一些好消息:我为urlpicker项目贡献了一点代码。)

实际问题

可以尝试在代码任务中解决通用列表提供的问题,代码任务是专门为程序员提供实习机会的。不管用什么编程语言,Project Euler都是一个受欢迎的项目,包括“一系列具有挑战性的数学/计算机编程问题”。欧拉项目收集了上百道题,一般都是由易到难,足够你忙上半天。

其他例子包括RubyQuiz,它已经在ruby-talk的邮件列表上流行了很多年。还有CodeKata,这是迪夫·托马斯的一个小规模短期项目。迪夫·托马斯是《实用程序员》的合著者之一。

这些选项不太适合自我激励的探索性学习的任务,因为会让人挠头,但如果好玩,可以像其他方法一样用在编程实践教育中。

智能手机(智能手机)

应用程序开发行业最大的新热潮是智能手机应用程序。这种设备通常需要开发人员使用一种特定的语言,这种语言可以最大限度地发挥设备作为应用平台的功能,至少是以官方认可的方式。

一个新的智能手机开发系统行业正在兴起,它允许开发人员用智能手机平台以外的其他语言编写自己的代码,然后将其转换为本机语言的应用程序。由于不需要学习任何特定智能手机平台的官方应用开发语言,Web应用也成为了智能手机应用开发的一种方法。选择语言而不是平台的另一个选择是使用诺基亚N900这样的设备,它运行Debian发布的Linux系统,可以运行各种软件,包括许多不是为智能手机设计的软件。

专注于开发智能手机应用程序的各种方法的书籍和在线教程已经出现,特别是针对Android和iPhone设备。一些第三方框架将能够将从HTML+JavaScript到Ruby或Python编写的代码“编译”成多个平台上的“本地”应用程序,有时不仅包括智能手机平台,还包括桌面系统。这种情况最令人兴奋的可能是,这些框架和相关的ide并不倾向于试图解决所有的编程问题,这与同样优秀的编程方法的主要框架不同,比如Visual Studio和。NET框架。这使得通过将选项缩小到一个可管理的问题领域来大大简化开发过程成为可能。这样一来,软件开发风格就很容易被初学者接受了。

缺点是,在学习如何编程时,你可能很难每天都编写新的智能手机应用程序。然而,如果你的智能手机的操作系统是一个类似Unix的系统(如N900),同样的小工具开发项目在工作站和服务器上都非常有用。

试算表

如果你使用一个带有强大宏系统的电子表格程序,你将有一个快速的方法来读取别人的代码并编写你自己的代码。首先,将多次执行、通常需要采取几个繁琐步骤的任务记录为宏。接下来,打开宏的源代码,阅读并编辑它,使它更适合一般用途。这是一个非常有限的方法,不会带来太大的进步,但可能会帮助你上路,自然喜欢简单的脚本代码。

也许使用这种脚本的最常见的电子表格程序是Microsoft Excel。Excel使用的VBA是一门很差的语言,但如果你在日常工作中大量使用Excel,它可能是你无论如何都要掌握的技能。OpenOffice.org使用了类似的宏系统,使用了同样的方法。和微软Office一样,LibreOffice提供了学习代码的机会。

无论如何,编程的门槛比写简单的命令行shell脚本代码要稍微高一点,因为菜单选项和按钮需要点击后才能启用。入门的成本类似于用市面上主要的IDE开始一个新项目,但这是一个大大缩减的“项目”。确保这不仅是在日常开发环境中编写脚本的机会,甚至是利用它的机会,这将是一个好主意。

Unix操作系统

如果你经常使用一些类似UNIX的系统,你会在寻找锻炼你最初编程技能的方法上有很大的优势。由于在平台上管理脚本的巨大灵活性,UNIX提供了比任何其他家庭通用操作系统更多的简单脚本自动化的机会。在最简单的情况下,管理脚本可以简单地将一系列shell命令保存到一个文件中。在此基础上,可以利用简单循环和条件结构、输入输出处理、文件读写、任务规划等进行扩展。

在愉快地编写了简单的shell脚本之后,任何Unix系统管理员都值得花些时间学习如何用Perl、Python和Ruby编写管理脚本。在UNIX环境中使用这些语言的关键技能包括通过Unix管道和重定向访问文本流、处理命令行选项、读写文件、使用正则表达式搜索和操作文本。管理员还希望了解编程的基础知识,如处理输出、循环(或某些情况下的递归),以及根据明确定义的标准使用条件判断结构编程进行决策。

编写Unix命令行工具是一片沃土,有很多机会使用脚本语言的强大功能进行编程。由于管理脚本开发的灵活性和简单性,编写工具的范围可以从一些有用工具的最简单示例到强大的服务器进程,甚至大规模并行任务自动化、负载平衡、启发式过滤和一些其他有趣的问题解决工作。这些问题引起了世界上最好的程序员的兴趣。

虽然几乎所有的通用操作系统都有一定的使用管理脚本的能力,但其中相当一部分的用途比较狭窄,而其他的则相对平衡。Unix在管理脚本的适用条件上更胜一筹,因为主要的Linux发行版和BSD Unix systems * * *等类Unix系统共享相同的基本运行环境设计,它们都可以受益于管理脚本和脚本平台之间的可移植性——只要你按照可移植性要求编写这些脚本(例如,通过使用sh或Perl而不是bash,选择系统标准sysctl值而不是数据源的proc文件系统)。

这些作品也适用于除了非常高级的、动态的、解释性的语言以外的其他语言。C,C++,Haskell,Objective-C,Objective Caml,以及大量的其他选项正好适合各种简单的Unix工具。对于其中的很多语言来说,即使你想完成一个简单的工程项目比如一个小的管理工具,你也必须学习更广泛的技能,这比Perl,Ruby,Bourne shell都要高。但是,相对于经常使用的GUI应用开发、系统编程等任务(尤其是在其他平台上),这些任务对于编程初学者来说要轻松得多。

事实上,鉴于UNIX哲学多年来提供了大量的常用工具,并且这些工具被严格划分(大部分)并且工作良好,类Unix环境对新手程序员的部分价值在于充分利用Unix命令行环境的力量,鼓励用户像程序员而不是观众一样思考。

网页

这是一个危险的建议。玩JavaScript学编程。这并不是因为JavaScript是一种糟糕的语言,而是因为对动态用户体验的追求,网页被JavaScript无限制的滥用搞得乱七八糟,所以在网页上纵容新手程序员可能会被认为是不负责任的。JavaScript在网页中也有一些积极的用途,它可以让新手对编写在浏览器中运行的桌面应用程序的想法越来越感兴趣,这让我们有很多理由在程序员的职业生涯中尽早开始学习JavaScript。

事实上,JavaScript是最常见和独立的客户端web脚本,这也意味着JavaScript可能是最简单的语言,你可以通过阅读别人的代码来学习它。找到任意一个带有客户端动态元素的网页,然后右键选择选项查看页面源代码,你会发现里面全是JavaScript的零散片段。对于更复杂的动态页面,(X)HTML页面甚至可以引用单个。js文件,带纯代码。

在将代码上传到公共Web服务器之前,请仔细检查代码;确保它是好的。如果您希望更多有用的脚本在本地启动,浏览器扩展性允许您将任何脚本应用到您查看的网页上——而且它只适用于您个人的浏览体验。火狐的Greasemonkey就是一个例子。