我试过几次学习shell(bash)脚本,但被语法驱逐了。然后我找到了Python,并且能够完成shell脚本在Python中可以做的大部分工作。我现在不确定是否应该把时间花在学习shell脚本上。所以我想问:
与Python相比,shell脚本的优势是什么使它成为不可或缺的工具?
我不是专业的系统管理员,但我有兴趣为家庭用户设置Linux系统,因此我认为学习shell脚本可能是必要的。
答案 0 :(得分:76)
'你可以在Python中用shell完成所有事情;也确实有些东西在Python中很容易在shell中很难(正如有些东西很容易在shell中但在Python中很难)。从长远来看,了解两者都是最好的。
答案 1 :(得分:51)
“与Python相比,shell脚本的优势是什么使它成为不可或缺的工具?”
外壳不是必不可少的。为什么你认为有这么多? bash,tcsh,csh,sh等等,
Python 是一个shell。不是你用来运行所有命令的那个,但对于脚本来说,它是理想的。
Python是所有Linux发行版的一个或多或少的标准部分。
更传统的炮弹做太多事情。
他们有一个方便的用户界面来运行命令。这包括一行命令,其中shell搜索您的PATH,分叉和执行所请求的程序。它还包括管道,序列和并发程序(使用;
,|
和&
)以及一些重定向(使用>
和<
)。< / p>
它们具有很少的编程语言能力,可以运行脚本。这种语言很难使用,而且效率极低。这种语言的大多数语句都需要分支一个或多个额外的进程,浪费时间和内存。
从shell运行程序,将stderr重定向到日志文件,这种事情很好。在shell中做到这一点。
几乎所有其他内容都可以作为Python脚本更高效,更清晰地完成。
您需要两者。但是,您永远不应该使用传统的shell语言编写带有if语句或循环的脚本。
答案 2 :(得分:28)
shell使常见和简单的操作变得非常简单,代价是使更复杂的事情变得更加复杂。
通常,一个小的shell脚本比相应的python程序更短更简单,但python程序将倾向于优雅地接受修改,而shell脚本在添加代码时往往会越来越难以维护。
这样做的结果是,为了获得最佳的日常工作效率,您需要使用shell脚本,但是您应该将它主要用于一次性脚本,并在其他地方使用python。
答案 3 :(得分:13)
使用python无法对shell脚本做任何事情。 shell脚本的一大优点是你使用与使用shell时相同的命令,所以如果你是一个沉重的shell用户,shell脚本将在某种程度上变成一种自动化shell工作的快速简便方法
我也发现在shell脚本中处理数据管道比在python中处理更容易,尽管从python中它是绝对可行的。
最后,您不必启动额外的插件来运行shell脚本,为您提供非常小的,但有时可能明显的速度和内存使用优势。
但话说回来,Python脚本的维护性更强,我正试图从丑陋的大型shell脚本迁移到Python脚本。使用Python进行异常处理和QA也更容易。
答案 4 :(得分:9)
一个人不必学习shell脚本,因为之前的所有答案都表明了;但学习从来都不是坏事。这真的是个人优先考虑的问题。其他人很难告诉你什么是值得的,也不值得你花时间。
大多数程序员发现每次学习新语言变得越来越容易。 (在自然语言中也是如此。)并且越早开始越好。
plus:学过一门语言可以让你从完全知识和熟悉的位置中大大地摆脱它的局限。这可能不会让你平静下来,但可能会从同龄人那里获得啤酒!
答案 5 :(得分:7)
我同意以前的大部分答案。我认为shell命令最适合做面向文件系统的任务(复制和移动文件,grep等)。在我看来,如果你必须读取和写入文件,Shell会更好,因为单个>>file.txt
重定向会立即附加到文件,而不是需要file=open('file.txt','a'); file.write()
等。
目前,为了个人使用,我每次都混合使用,创建一个python脚本并调用os.system('command')或os.popen('command')每次shell中的操作比在python中更容易。< / p>
答案 6 :(得分:6)
shell随处可用。如果您坚持使用相对基本的便携式功能,您的脚本可以在手机,无线路由器,DVR,上网本,工作站,大型铁服务器等上运行。 Python并不一定包含在许多系统中,并且根据环境的不同,可能很难安装它。
学习一些shell脚本也可以帮助你学习一些命令行技巧,因为命令行就是shell。它也适合用一些相当长而复杂的命令行,并在你意识到你需要它之后将它转换成更通用的脚本。
shell还有一些非常强大的功能;就我所知,pipelines是一个非常有趣的控件构造,只有shell本机。
答案 7 :(得分:5)
选择Python的shell脚本时要考虑的另一件事是将在目标机器上运行的Python版本。 RHEL5(名称之一)将会存在很长时间。 RHEL5坚持使用Python 2.4。有很多很好的库依赖于2.4之后添加到Python的功能。