与Python相比,Shell脚本的优势

Amo*_*wai 91 python shell

我试过几次学习shell(bash)脚本,但被语法驱逐了.然后我找到了Python,并且能够完成shell脚本在Python中可以做的大部分工作.我现在不确定是否应该把时间花在学习shell脚本上.所以我想问:

与Python相比,shell脚本的优势是什么使它成为不可或缺的工具?

我不是专业的系统管理员,但我有兴趣为家庭用户设置Linux系统,因此我认为学习shell脚本可能是必要的.

Jon*_*ler 79

  • Shell脚本具有更简单的I/O重定向符号.
  • 从shell中的现有程序创建管道更简单.
  • Shell脚本重用整个程序.
  • Shell是普遍可用的(在Unix之类的东西上) - 不一定要安装Python.

'你可以在Python中用shell完成所有事情; 也确实有些东西在Python中很容易在shell中很难(正如有些东西很容易在shell中但在Python中很难).从长远来看,了解两者都是最好的.

  • 1和2,好点.#3是一个弱点,因为它会导致Python可以避免的大量开销.#4可能在很大程度上是不真实的.Python现在是大多数Linux发行版的一部分. (16认同)
  • 另外值得注意的是#4的特点是`bash` shell特别不适用于所有Linux发行版,特别是嵌入式系统的发行版,以及其他运行`busybox`可执行文件的发行版.以bash`向后兼容的Bourne shell本身的脚本将在所有符合POSIX的系统上运行,但是该语言比`bash`实现的语言更受限制. (7认同)
  • @intuited:eval"$(历史2 |头-1 | perl -pe's /(?<=哪个)更可能/至少/')"; 历史-d $(历史2 |头-1 | sed's/^\s*\([0-9]\+ \)/\1 /') (5认同)
  • 我认为第3点是一个巨大的优势,而不是劣势.例如,考虑使用转换程序调整充满图像的目录. (2认同)

S.L*_*ott 54

"与Python相比,shell脚本的优势是什么使它成为不可或缺的工具?"

外壳不是必不可少的.为什么你认为有这么多?bash,tcsh,csh,sh等等,

Python 一个shell.不是你用来运行所有命令的那个,但是对于脚本来说,它是理想的.

所有Linux发行版中的Python都是一个或多或少标准的部分.

更传统的炮弹做了太多事情.

  1. 它们有一个方便的用户界面来运行命令.这包括一行命令,其中shell搜索您的PATH,分叉和执行所请求的程序.它还包括管道,序列和并发程序(使用;,|&),以及一些重定向(使用><).

  2. 它们具有很少的类似编程语言的能力来运行脚本.这种语言很难使用,而且效率极低.这种语言的大多数语句都需要分支一个或多个额外的进程,浪费时间和内存.

从shell运行程序,将stderr重定向到日志文件,这样的事情是好的.在shell中做到这一点.

几乎所有其他东西都可以作为Python脚本更高效,更清晰地完成.

你需要两者.但是,您永远不应该使用传统的shell语言编写带有if语句或循环的脚本.

  • @S.洛特:似乎有些语义不一致在这里的电路中.我对UNIX shell的定义是一个解释器,其语言主要用于控制UNIX系统的高级操作.根据这个定义,某种类型的shell对于UNIX系统的操作当然是必不可少的,并且Python不符合条件.你会如何定义这个词? (3认同)
  • @ S.Lott:有趣的是,你的哲学与我的理念截然不同.我觉得设计和操作基本上都是鸡和蛋.这就是说shell脚本是一个运行程序的程序.其中许多程序最初是作为日益复杂的shell脚本实现的.在某些时候它变得有价值,可能与模块化效率一样多,因为其中一些用C语言重写,后来用Python重写.例如:在某些时候`猫'$ 1"| ssh"$ 2""cat - > \"$ 1 \""`begat`scp`.他们知道如何最好地设计它,因为他们已经在使用它. (2认同)

小智 31

shell使得常见和简单的操作变得非常简单,代价是使更复杂的事情变得更加复杂.

通常,一个小的shell脚本比相应的python程序更短更简单,但python程序将倾向于优雅地接受修改,而shell脚本在添加代码时往往会越来越难以维护.

这样做的结果是,为了获得最佳的日常工作效率,您需要shell脚本,但是您应该将它主要用于一次性脚本,并在其他地方使用python.


elz*_*app 13

使用python无法对shell脚本做任何事情.shell脚本的一大优点是你使用与使用shell时相同的命令,所以如果你是一个沉重的shell用户,shell脚本将在某种程度上变成一种自动化shell工作的快速简便方法.

我发现在shell脚本中处理数据管道比在python中处理更容易,尽管从python中可以完全实现.

最后,您不必启动额外的插件来运行shell脚本,为您提供非常小的,但有时可能明显的速度和内存使用优势.

但话说回来,Python脚本更易于维护,我正试图从大丑陋的shell脚本迁移到Python脚本,正是出于这个原因.使用Python进行异常处理和QA也更容易.


小智 9

一个人不必学习shell脚本,因为之前的所有答案都表明了这一点; 但学习从来都不是坏事.这真的是个人优先考虑的问题.别人很难告诉你什么是值得的,也不值得花时间.

大多数程序员发现每次学习新语言变得越来越容易.(在自然语言中也是如此.)并且越早开始越好.

加上:学过一门语言可以让你从完全知识和熟悉的位置中大大地摆脱它的局限.这可能不会让你平静下来,但可能会从同龄人那里获得啤酒!


hel*_*ker 8

我同意以前的大部分答案.我认为shell命令最适合做面向文件系统的任务(复制和移动文件,grep等).在我看来,Shell更好,如果你必须读写文件,因为单个>>file.txt重定向会立即附加到文件,而不是需要file=open('file.txt','a'); file.write(),等等.

目前,为了个人使用,我混合使用,创建一个python脚本并调用os.system('command')或os.popen('command')每次shell中的操作比python中更容易.


Bri*_*ell 6

外壳随处可用.如果您坚持使用相对基本的便携式功能,您的脚本可以在手机,无线路由器,DVR,上网本,工作站,大型铁服务器等上运行.Python并不一定包含在许多系统中,并且根据环境的不同,可能很难安装它.

学习一些shell脚本也可以帮助你学习一些命令行技巧,因为命令行就是shell.它也适合采用一些相当长而复杂的命令行,并在你意识到你需要它之​​后将其转换为更通用的脚本.

外壳还具有一些非常强大的功能; 据我所知,pipelines是一个非常有趣的控件构造,只有shell本机.


小智 5

选择Python的Shell脚本时要考虑的另一件事是将在目标计算机上运行的Python版本。RHEL5(仅举一例)将存在很长时间。RHEL5停留在Python 2.4中。有很多不错的库,它们依赖于2.4后的Python添加的功能。