2009-06-24 35 views
3

您喜歡爲常見任務編寫腳本(備份,同步等)的語言,爲什麼?我不是在談論編程網頁或應用程序。首選終端腳本語言

我在思考爲什麼bash仍然很受歡迎時提出了這個問題。例如,Python對我來說看起來更舒適。你只是因爲你知道它或出於某些特殊原因而使用它?

回答

4

如果是「創建這個目錄,運行這個命令,如果有效的話,運行這個」-level,我只是使用bash shell腳本..

任何比較複雜的東西,比如分析命令的輸出並對其執行操作,會變成一個Python腳本 - 我發現它的編寫速度很快,主要是因爲shell腳本很難調試(bash腳本錯誤消息aren與Python的回溯相比,它確實有用..),並且結束代碼變得更可讀

3

Unix有一個小工具的理念,它可以完成一項特定的工作,並且做得很好。通常解決問題的最簡單方法是使用這些工具的組合。殼牌腳本是這方面的王者,對此毫無疑問。

當然,另外還有「當你只有一把錘子」綜合症:)

1

天兒真好,

不同的任務需要不同的語言。我傾向於使用shell,通常是bash,或Perl,具體取決於任務。

現在我對Ruby更加適應,對於那些可能適合面向對象方法的任務,我會使用它。

HTH

歡呼聲,

3

這真的取決於腳本的類型。我開始爲許多系統管理員類型的任務使用紅寶石,但bash仍然是我快速和骯髒的腳本的第一選擇。在我看來,bash的優勢在於它的互動性。

舉個例子。有一天,我在大約200個壓縮的日誌文件中搜索一些特定的值,重新格式化輸出並郵寄結果。

這是非常容易使用bash來迭代地做到這一點,因此,zcat一個文件將輸出管道輸送到grep,重試幾次以獲得正確的正則表達式。然後,使用awk重新輸出並重新格式化結果,再次重試幾次以獲得正確的格式。

這個過程花了幾分鐘時間後,我將bash命令寫入腳本文件,對它進行參數化,對它進行循環包裝,發送結果並完成作業。

,我覺得這個過程在bash簡單得多隻是用命令編輯和重試的正則表達式等,比我會在一個單獨的腳本文件,其中我要保持編輯腳本和重試等

1

Perl的將是最好的處理系統管理任務。我從來沒有遇到過沒有安裝Perl的* nix系統。

1

Python對於我來說目前我喜歡使用python,因爲它有一個交互式終端,我可以使用它來構建和執行腳本 - 但我過去使用過perl。

0

Bash是這類任務的首選腳本語言。它非常普遍,它的目的是成爲一種粘合劑語言,因爲您可以將通常在終端中執行的一系列命令粘合在一起,幾乎不變。

0

我對大部分shell腳本任務都使用Ruby。我永遠不會記得Bash腳本的一些細微差別/陷阱。

1

Bash或廣義上的各種sh方言可以假定爲幾乎任何unix系統上都存在。通常,生產Unix系統(Solaris,HP/UX,AIX等)的安裝非常簡單,通常他們不會安裝perl或python。可能有公司政策限制這一點,因此安裝它也可能不是一個選項。如果你想要在這種類型的平臺上工作的東西,你可能會被限制爲sh/sed/awk。

Bash對於主要涉及運行其他命令的任務來說相當不錯,因此您不應該低估它。但是,它很快就變成了一個只寫的語言,其複雜程度相當瑣碎,因此如果您正在編寫一些內部處理很多的東西,那麼Perl或Python可能是更好的選擇。

對於安排備份,從cron運行的bash腳本很可能是完成這項工作的最佳方式。對於涉及解析多個日誌文件的內容,將輸出格式化爲摘要狀態文件並在發現某些類型的事件時向您發送電子郵件通知,那麼使用perl或python可能會更好。

4

...爲什麼bash仍然流行?

那麼,因爲Bourne Shell(sh,而不一定是bash)在任何+ * n * x安裝中都可用。

的SH和良好的命令vi其連接到通過Telnet/SSH

遠程服務器對於本地管理員(當你自己的服務器),你可以使用Python/Perl的/紅寶石和定製他們的時候非常有幫助你將。但肯定的是,您可能會被要求「快速修復」安裝了這兩個默認設置的其他服務器:sh + vi

這就是爲什麼。

0

我使用紅寶石,因爲我最舒服。它是我發現自己正在努力解決問題的邏輯的少數語言之一,而不是語言的語法或限制。將它與C++或Perl進行比較,其中我對指針和標記感到沮喪。我發現在Ruby中很容易實現遞歸目錄遍歷和運行系統命令,例如using Ruby to rename files and edit their content

0

我通常使用perl。 CPAN中的模塊庫使許多任務變得簡單。 Net :: SSH是實現系統管理任務自動化的強大工具。

0

在使用不同風格的Linux和BSD之後,我傾向於在Bash或Korn Shell中創建原型,然後轉換爲Bourne Shell進行移植。從來沒有讓我失望。