我在看 http://tldp.org/LDP/abs/html/why-shell.html 并被以下所震惊:

何时不使用 shell 脚本

...

  • 您将公司的未来押在任务关键型应用程序上

为什么不?

有帮助吗?

解决方案

当您发挥 shell 脚本的优势时,使用 shell 脚本就很好。我公司有一些5类软交换机,呼叫处理代码和配置接口是用java编写的。其他所有内容都用 KSH 编写 - 用于备份、修剪、日志文件轮转和所有自动报告的数据库转储。我认为所有这些支持功能虽然与调用路径没有直接关系,但都是关键任务。尤其是数据库交互。如果数据库交互代码出现问题并转储呼叫路由表,则可能会让我们破产。

但永远不会出错,因为 shell 脚本是处理此类事情的完美语言。它们很小,很容易理解,操作文件是它们的强项,而且它们很稳定。KSH09 不会完全重写,因为有人认为它应该编译为字节码,所以它是一个稳定的接口。坦率地说,用 Java 编写的配置界面经常出现问题,而且在我的记忆中,shell 脚本从未出现过混乱。

其他提示

我认为这篇文章列出了一个非常好的清单,列出了何时不使用 shell 脚本的原因 - 您指出的单个关键任务项目符号更多的是基于所有其他项目符号的结论。

话虽如此,我认为您不想在 shell 脚本上构建关键任务应用程序的原因是因为即使其他要点都不适用 今天, ,任何要在一段时间内维护的应用程序都会 发展 到了在某个时候至少被这些潜在陷阱之一所困扰的地步……如果不彻底重来,你真的无法做任何事情。修复...希望你从一开始就使用更具工业强度的东西。

显然,这对我来说有点像一个稻草人。我真的很感兴趣为什么人们认为在“关键任务应用程序”中应该避免使用 shell 脚本,但我想不出一个令人信服的理由。

例如,我见过(并编写过)一些使用 SQL*Plus 与 Oracle 数据库交互的 ksh 脚本。遗憾的是,系统无法正确扩展,因为查询没有使用绑定变量。对 shell 脚本进行攻击,对吗?错误的。问题不在于 shell 脚本,而在于 SQL*Plus。事实上,当我用连接到数据库并使用绑定变量的 Perl 脚本替换 SQL*Plus 时,性能问题就消失了。

我可以很容易地想象将 shell 脚本放入航天器飞行软件中将是一个坏主意。但 Java 或 C++ 可能同样是糟糕的选择。最好的选择是通常用于此目的的任何语言(汇编?)。

事实上,如果您使用任何风格的 Unix,您就会在关键任务情况下使用 shell 脚本,假设您认为启动是关键任务。当脚本需要执行 shell 不擅长的操作时,您可以将该部分放入子程序中。你不会把剧本全部扔掉。

脚本只不过是计算机程序。有些人会认为脚本不太复杂。这些人通常会承认您可以用脚本语言编写复杂的代码,但根据定义,这些脚本实际上不再是脚本,而是成熟的程序。

任何。

在我看来,正确的答案是“视情况而定”。顺便说一句,这与您是否应该信任关键任务应用程序的已编译可执行文件的相反问题的答案相同。

好的代码是好的,坏的代码是坏的——无论是用 Bash 脚本、Windows CMD 文件、Python、Ruby、Perl、Basic、Forth、Ada、Pascal、Common Lisp、Cobol 还是编译的 C 语言编写。

这是 不是 说语言的选择并不重要。 有时,选择特定语言或编译与非编译语言有很好的理由。解释(性能、可扩展性、能力、安全性等)。但是,在所有条件相同的情况下,我会相信由优秀程序员编写的 shell 脚本,而不是一周中任何一天由傻瓜编写的等效 C++ 程序。

可能是 shell 脚本帮助公司取得了成功 进入 未来。我知道,仅从编程的角度来看,我会浪费大量时间来完成委托给 shell 脚本的重复任务。例如,我知道命令行的大多数颠覆命令,但如果我可以将所有这些命令集中到一个脚本中,我可以随意启动,我可以节省时间和精力。

正如其他一些人所说,语言是一个因素。对于我不想记住的简短步骤和粘合程序,我完全信任我的 shell 脚本并依赖它们。这并不意味着我要构建一个在后端运行 bash 的网站,但我肯定会使用 bash/ksh/python/whatever 来帮助我生成框架项目并管理我的打包和部署。

当我读到这句话时,我关注的是“应用”部分而不是“关键任务”部分。

我读它是说 bash 不是用来编写应用程序的,它是用来编写脚本的。当然,您的应用程序可能有一些内务脚本,但不要编写 critical-business-logic.sh 因为另一种语言可能更适合类似的事情。

我敢打赌,作者正在表明他们对 shell 脚本质量的某些方面感到不安。例如,谁对 BASH 脚本进行单元测试。

此外,脚本与底层操作系统的耦合程度相当高,这可能是一件负面的事情。

不管怎样,我们都需要一个灵活的工具来与操作系统交互。这是我们使用的与操作系统的人类可读的交互,就像使用螺丝刀和螺丝一样。命令行永远是我们需要管理员、程序员或网络的工具。看看他们甚至在 powershell 上进行了扩展。

脚本不适合实现某些关键任务功能,因为它们必须同时具有 +r 和 +x 权限才能运行。可执行文件只需要有+x。

脚本具有 +r 的事实意味着用户可能能够复制该脚本、编辑/颠覆它并执行其编辑的 Cuckoo's-Egg 版本。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top