学习linux shell脚本是多么有用/困难?替代建议?

时间:2009-02-14 07:15:11

标签: linux shell

我迫切需要一些建议。

我几乎完成了我作为CS专业的大三学年。我有点觉得自己是一个后来者,因为直到大二那年我才真正进入计算机科学......通过努力工作,一年中有很多学分和暑期学校我几乎赶上了我的同龄人但是这里来了忧虑:

我的所有学校工作都教会了我很多关于计算机科学的知识,但对实际编程却知之甚少。虽然我有很多动力,但我几乎没有空闲时间让我接受侧面项目。这让我感到不安,原因有两个,1)我真的对这个领域充满热情; 2)我知道很多雇主都喜欢看到在校外有经验的学生。

所以我最近有一个想法:如果我将Linux作为我的主要操作系统,但尽可能地限制自己到终端,试图自然地(在谷歌的帮助下)熟悉命令行并希望如何逐步使用在线教程获取shell脚本。

您认为这对有抱负的程序员有多大益处?它有多现实?对于那些几乎没有空闲时间的学生可以在校外接听的小项目,您还有其他建议吗?

非常感谢,我喜欢这个网站(和播客),并会感谢任何反馈。

10 个答案:

答案 0 :(得分:13)

听起来像一个很好的计划。一些建议:

  1. 学会自动化所有功能。养成习惯。如果你做了几次以上的事情,把它放在一个脚本中。这不仅仅是为了避免打字而是为了记录这个过程。在发现问题时改进脚本。适当时共享脚本。

  2. 了解流水线的力量。发现xargs命令的用途。使用您选择的语言重写标准命令行实用程序,如grepsort。 (我偏爱Perl,但这几乎是作弊。; - )

  3. 自定义.bashrc文件。了解您喜欢哪些设置以及哪些设置不适合您。

  4. 使用ksh而不是bash作为脚本。没有太多差异,但ksh有一些非常好的额外功能。但是,我更喜欢bash用于交互式shell。


  5. 似乎其他答案建议专注于“真正的编程语言”。我不会说这是一个糟糕的建议,但根据我的经验,很少有程序员能够充分利用命令行。在职业生涯中,良好地使用shell脚本可以节省无数小时和大量乏味。

    让我举个例子。本周末,我开始在我们的生产系统中添加新代码。我们上周一直在测试它,一切看起来都不错。理想情况下,您希望拥有一个完美的操作系统克隆,以便您可以测试苹果。但是我们买不起两个硬件副本,所以我们借用生产机器来运行测试,并在我们执行升级时将它们交换到生产中。

    现在要区分我们的操作和测试,我们使用两个不同的帐户。因此,在将系统投入运营之前,我们会清除测试帐户生成的某些文件。基本上这是一个两步过程:

    1. 查找测试用户创建的所有文件。

    2. 把它们吹走。

    3. 我想我需要花一两分钟时间编写代码才能在Perl中执行此操作,并在几分钟内完成测试。这是一项简单的工作。我甚至不确定如何在C / C ++中实现它。我想你会从根目录的stat开始。

      但是掌握了shell脚本的每个人都在上下跳跃,挥手并大喊答案,因为你可以在输入代码时编写代码:

      $ find /data -user test | xargs rm -rf
      

      测试包括运行命令和观察错误。这个特殊问题是bash驾驶室内的垒球球。 Perl完成了工作,但它不那么自然了。 (我使用find2perl,这只是增加了一个步骤。)在C或C ++中尝试这个将是一个不切实际的任务。这些语言旨在解决不同的问题。

      现在,如果你不在UNIXy环境中工作,可能有一个专门用于做这类事情的工具集。 (我不是专家,但在Windows中我可能会运行搜索以在一个窗口中获取所有文件,选择全部并删除。非常简单。但我不知道如何自动化它。)但是如果您打算在UNIX / Linux世界中找到一份工作,那么必须熟悉命令行,这样您就不需要花费5分钟来完成30秒的工作。

答案 1 :(得分:4)

Shell脚本大多没用。我是一个Linux人,如果必须的话,我可以编写一个shell脚本,但任何通常需要shell脚本的任务都可以在Python中以类似程序员的方式完成。如果您需要大量脚本,可以将一些更有用的代码分解为可由多个脚本共享和使用的类。 Python脚本的运行速度比纯shell脚本快几个数量级。我发现shell脚本语法(例如Bash)不支持合适的数据结构。甚至Perl也是对纯shell脚本的改进。

如果您希望扩展视野,请学习不同的编程语言和范例。如果你接受过Java教学,可以学习像Python或Perl这样的动态语言,以及像C或Pascal这样的低级语言。如果您编写了CLI应用程序,请编写具有GUI层的应用程序。如果您只学习了如何编写传统桌面应用程序,请编写一个数据库支持的Web应用程序。

哦,是的,学习Javascript。它可能是每个程序员为了职业发展目的而应该知道的单一语言。

答案 2 :(得分:3)

做你感兴趣的事情 - 如果Linux和shell脚本让你开启 - 运行它。虽然,现在有很多途径可以学习在Windows或OS X或任何其他操作系统上进行编码。您可以在多个平台上免费下载以下任何内容.... PHP,Ruby,SQL Server,Oracle,Java,C,C#....和Google(当然还有SO)拥有您在文档方面所需的一切对于你遇到的任何问题。

你是对的 - “实用”方面真的很重要 - 而且它与你的学校工作有很大的不同。你是正确的想要自己做项目 - 这是真正掌握这些东西的唯一方法。正如你所做的那样 - 确保你真的喜欢这样做 - 而不仅仅是这样做的想法......因为它往往需要很大的耐心......

答案 3 :(得分:1)

嗯,通过对计算机科学的深入了解,所谓的“实用编程”并不难理解。这并不是说没有太多东西需要学习;然而,拥有计算机科学的掌握本质上意味着学习各种编程语言并不会非常困难。你参加过操作系统课程了吗?如果没有,你应该拿起所谓的恐龙书并开始研究它。 Bash编程非常简单。你应该学习像C这样的语言等等;与这些相比,shell编程相当简单。虽然,重要的是学习。如果您还没有参加操作系统,那么如果您的课程是值得的,那么您肯定会作为学位的一部分。在那个课程中,你应该经历许多练习,甚至实现你自己的简单shell是一个非常常见的入门项目。

无论如何,一定要开始学习Linux。在Bash,内核编程等上找到经典的HowTos。至于多么现实......我希望所有CS学生都能严格理解所有这些概念。没有它,我不允许学生获得学位!

答案 4 :(得分:1)

如果您要成为一名程序员,我建议坚持使用您的主要语言,并学习随附的各种库和框架。 Bash脚本非常有用,但它主要用于系统管理。

如果您计划成为基础架构或系统管理员,那么请学习bash脚本。否则花时间编程。您可以选择脚本语言作为主要关注点,然后您也可以将它用于shell脚本,例如python。

HTH

答案 5 :(得分:1)

为什么要浪费大量时间学习shell脚本?曾几何时,我是它的主人并使用sh脚本编写整个系统,但那是在perl和其他脚本语言之前。 sh是一种可怕的语言,鼓励不良习惯,而且不需要。只学习最基础知识 - 你可以从sh手册页的一两次读取中获得什么。然后学习一些有用的东西 - 对于时间有限的人来说,perl和python是很好的选择。

答案 6 :(得分:1)

如果你整天都被困在一个Linux shell中......你肯定会花一周或一个月的时间来学习bash。 认真地说它只是每个核心Linux用户需要的东西......不管别人怎么说...... 一旦你投入了这段时间,它将帮助你理解初学者,以及许多其他你可以用脚本快速完成的事情。这是一项值得投入一周或一个月时间的重要技能...... 你永远不会后悔。

在那个小介绍之后,你允许自己...去学习像蟒蛇或珍珠这样适当的语言。几年来你对你选择的语言感到满意......但同时快速和讨厌的脚本和理解linux操作系统启动文件等...你的bash学习周总是和你在一起

最终你可能会将珍珠用于一切......但在此之前肯定需要一到两年的经验。

我只希望当我开始使用Linux时,我只用了整整一周的时间来打击。 在看一些剧本时我总是被困住,因此不得不超时,只是做一个学习bash的短暂时间。

答案 7 :(得分:0)

我肯定建议你至少学习一下C / C ++的基础知识,以了解计算机的工作原理。

您还应该学习C#或Java的基础知识,以了解托管世界和垃圾收集,字节码/ IL,jit编译等概念。

你应该至少看一眼Ruby和Python的方向,让自己熟悉动态语言的想法。

投入Rails,PHP或ASP.NET以了解Web编程和MVC等概念。

了解单元测试,测试驱动开发,依赖注入/控制反转,ORM。让您在源代码控制和持续集成领域感到舒适。至少检查维基百科的流行语,如敏捷,scrum,精益和看板。

如果您想在校外获得任何经验,请参与一个小型的开源项目。我上面提到的任何语言,平台或框架都有很多。你不必自己动手,也不必花费很多时间。从小到处开始,然后提交错误修复或小增量功能。

这些都是今天编程领域非常重要的方面。

Bash究竟适合所有这些,我不确定。它可以是一个非常有用的工具,可以使您的日常任务变得更加容易,但是很多其他工具也可以。但是,我不一定认为Bash会对你教授现代编程很有帮助,并为你作为一名软件工程师做好准备。

然后,我个人对Bash的了解并不多,所以也许我完全错了......

答案 8 :(得分:0)

我不知道如何制作sh脚本,但偶尔我发现我需要一些当前程序无法实现的东西,但我可以从我系统中已有的程序中编写我的工具。

在我最需要它的时候,我将选择一个bash脚本教程,并检查我需要的构造类型需要什么样的语法。一直在学习一些脚本,但这不是我的主要兴趣。

sh脚本看起来很糟糕,你真的不需要它们,除非你真的真的需要它们。

答案 9 :(得分:0)

我强烈推荐使用linux作为自动化工具并让生活更轻松的人。使用perl,您可以编写快速简便的程序,实际上可以在很短的时间内完成真正的任务。 Python是一个很好的选择,可以更好地处理对象,虽然它偏离了C风格,我猜这是你的大多数经验。