shell好難學,能用python替代shell嗎?


可以,我曾花過時間把組內的一些Shell腳本都改為Python,可維護性與可讀性也明顯上了一個檔次,Bash那東西,一旦變大了,過一段時間就不知道寫的是什麼玩意兒了,很多看起來就像鬼畫符一樣,看的我很生氣,於是那段時間我一怒之下就把看不順眼的全改為Python了,舒服太多了。


沒辦法
大部份的真實場景是
有什麼用什麼
有 python 就用 python
有 perl 用 perl
有 shell 用shell
有 C 用 C
不幸遇到 forth lisp scheme haskell
也是得硬著頭皮跟他廝殺
結果就是都得具備看懂跟改寫的能力
反正有 stack overflow
就先這樣吧


可以代替但不是最優。shell這麼大年紀還越過越精神,印證了那句尺有所短寸有所長。shell的管道是unix設計哲學的精華。能用grep, awk, sed和簡單數組,循環搞定的,就用不著perl, python,翻過來如果需要map等複雜結構,就可以用嚴肅腳本了。


一般來說還是都要會比較好,bash基本上來說主要就是linux命令,sed, grep, awk,足夠了,用到的時候再去查一下語法就行了。大量調用外部命令的情況下bash還是要簡單不少。最重要的還是它調用的結果肯定跟你在命令行裡面敲一遍的結果一樣。
Python不是不可以,只是寫的會多一些。作為程序員自然是要去學會用最適合的工具。


對啊,Shell很難學的,反對所有說Shell簡單的答案。Shell Shock這個事情,充分說明了其實沒有人懂Shell。Shellshock (software bug)

這種只寫語言,稍微會用就行了。干正事不要用它,題主用Python取代它的想法是正確的。


比如

import os
os.system("") # 結果還是要會SHELL

import subprocess
subprocess.call() # 結果還是要會SHELL

當然會不會與用不用是兩個概念。


shell比python簡單才對吧?

當然,如果你對python更熟悉,自己用python也是不錯的選擇。邏輯複雜起來的話,shell不如python。

但shell最好還是了解一下,不要完全不會。現存的shell腳本不計其數,而且與人協作時也可能需要。


單行命令+管到能解決的,用bash。
一次性腳本優先用bash。
通過多個可執行文件交互完成的操作優先用bash。
涉及數值運算的可以考慮Python。

對了,有一個Python的shell叫xonsh,另外有一個項目叫ptpython,裡面有一個ptipython是ptpython+ipython


發自肺腑覺得 bash shell更簡單
推薦一本書:Linux Command Line and Shell Scripting Bible 3rd


老實說shell一直用。但是真不如python好用。反過來講就有道理了。 有了python為什麼還要shell。 因為python幾乎可以做shell所有的事情,而且更方便,更好。

原因很簡單,因為shell更小巧,更適合做批處理。這是linux設計之初就定下來的原則。

python強大在於它是通用語言。字元串,文件解析,正則表達式等等都要比shell方便。另外它還有強制的擴展功能。不象shell那樣需要各種命令工具支持。編程也更優美,可讀性也更強。

python誕生之初就是為了簡化運維工作量用的。最後發展成通用語言。 ruby則不同。它就是通用語言。為了編程樂趣而生的。優雅。

這兩種語言只需要學一個就可以了。


可以,早期這種活我們一般都用Perl做了,現在用Python也未嘗不可,反正基本上都是系統自帶的語言,兼容性上不會出大問題。

shell的話,能看懂就行了。幾種shell語法還不一樣,太煩。複雜點的用膠水語言是不錯的選擇。


Python當然能代替,平常shell也只用一些命令,但是如果邏輯稍微複雜點,shell就顯得很麻煩。

尤其是shell奇葩的循環,判斷語法


可以,很多項目已經在這麼做了,效果非常好。


可以的。我現在預計會超過10行的shell腳本基本上都用python寫。


可以,但不一定更簡單/有效率,要看使用場景。

輸入輸出複雜的情況,Python 調用命令行程序不好調試,還得 print 。而 bash 你可以一行一行在終端里測試,更直接。

而控制流程和數據結構複雜的情況,Python 就好得多。

另外,Python 是跨平台的,而 Bash 通常不行。如果你的項目要跨平台開發,又不想寫幾份功能一樣的腳本,那 Python 就是好的選擇了。

總之 PHP 是最好的。


完全替代是不可能的,推薦結合著使用。


功能上,能,甚至更強大。

實用性上,沒啥卵用。最多是寫寫腳本權當高級批處理。

且不論你需要放棄一堆已有的shell腳本,你確定要用個調一下gnu套件都要導包調函數的玩意來解決日常操作?用Pipe去調函數定向管道?

畢竟python雖然動態類型,好歹丫是個強類型,靈活度上還是比不過弱類型的bash的。


用python替代shell 編程是系統運維的趨勢。
早日通過學習Python學會編程,會讓你增加職業技能。


為什麼把應用場景不同的兩種東西放一起比呢?
Shell本質上還是靠調用各種命令行工具來幹活,你可以想像成帶有控制邏輯的批處理。
Python作為一種比較強大的通用語言,Shell能幹的事情確實它都能幹。
但是相信我,適合用Shell解決的事情,用Python干並不會更簡單。不然以Python在Linux 的普及程度,shell早被取代了。


首先,一門語言的成熟度,可以量化為需要具備完整的功能、科學且不變態的語法、方便的開發與調試環境等具體指標。從這些具體指標來看,shell並不合格。比如防止注入問題、驗證器問題、並行問題、模塊化與面向對象問題、大型系統的調試問題等,shell都不完善。

其次,一旦用別的語言來代替shell,問題就開始發生變化。比如另一門語言能否優雅地徹底解決上述問題?這門語言是否會引入新的問題?而且新語言是如何代替shell的?如果是直接調用shell,那麼注入問題解決了嗎?等等。

最後,我覺得,用Python代替shell,是一種嘗試。但我在上面提到的問題,我發現Python並不能把它們全部優雅地解決掉。


推薦閱讀:

學習 C++ linux 開發服務端,有哪些書籍和建議?
計算機學生想通過造輪子學習伺服器端編程開發請教?
如何評價可以自動更換 User-Agent 的爬蟲設計?
谷歌爬蟲主要是用C++開發嗎?
Linux下connect函數埠連到自己, 這種問題怎麼解決?

TAG:程序員 | 編程語言 | Python | Shell編程開發 | C |