Bash、Python和JavaScript哪個指令碼更適合執行自動化任務?- Suranga
比較 Bash、Python 和基於 JavaScript 的 Shell 指令碼的優缺點:
Shell 指令碼是指專門為 Bash 等命令列直譯器建立的原始檔。程式設計師經常編寫 Shell 指令碼,透過自動化他們重複執行的任務來提高生產力。例如,他們為檔案操作、環境設定、執行測試套件和部署編寫自動化指令碼。
Shell 指令碼通常在命令列直譯器上執行。但是,我們可以使用流行的通用程式語言編寫 Shell 指令碼,並且仍然稱它們為 Shell 指令碼。
您可以使用 Python 建立現代 Shell 指令碼,並像 Bash 指令碼一樣使用 Python 直譯器執行它們。您可以在 Python 原始檔中生成其他 Unix 程式,就像使用 Bash 一樣。此外,由於 Nodejs 執行時,JavaScript 是快速編寫自動化指令碼的絕佳替代方案。
使用 Bash 編寫 Shell 指令碼
Bash 是一種廣泛使用的命令列直譯器,因為它預設包含在幾乎所有 Unix 或類 Unix 作業系統中。因此,您可以使用 Bash 編寫可移植的 POSIX 指令碼。
Bash 是一種命令語言,而不是通用程式語言。因此,當您的自動化指令碼的邏輯增長時,它會變得更加複雜且不可讀。此外,Bash 總是試圖將所有內容都視為命令,因為它是一種命令語言。請參閱以下示例:
#!/bin/bash x=10 echo $x # 列印 10 x = 10 # x: 找不到命令 echo $x |
Bash 沒有標準 API,但它帶有簡單的內建功能(例如:內建文字操作)。但是,您經常需要生成程式來處理資料(還記得sed嗎?)。因此,與我們可以用來編寫自動化指令碼的其他語言相比,Bash 的執行速度非常慢。
使用 Python 編寫 Shell 指令碼
Python 是 Bash 編寫環境設定、構建和釋出指令碼的流行替代方法。我看到 Electron 專案將 Python 用於幾個實用程式指令碼。您不能直接在 Python 中執行命令,因為它不是命令語言。但是執行命令和捕獲輸出對於subprocess模組來說是小菜一碟。看下面的例子:
#!/usr/bin/python3 import subprocess o = subprocess.check_output(['node', '--version'], text = True) print('你正在使用 Node ' + o) |
上面的 Python 指令碼列印了計算機的當前 Nodejs 版本。該指令碼等效於以下 Bash 指令碼:
#!/usr/bin/bash o=$(node --version) echo 您正在使用 Node $o |
現在,您可以使用 Python 的內建功能編寫現代豐富的 Shell 指令碼。但是,Python 直譯器本身並不像 Bash 那樣支援流程執行。因此,如果我們需要進一步簡化 Python 指令碼,使其看起來更像 Bash,我們必須使用Shellpy 之類的工具。看看下面的 Shellpy 指令碼,它完成了上一個指令碼的工作:
#!/usr/local/bin/shellpy3 o = `node --version print('你正在使用 Node ' + o.stdout) |
Python 是一種對開發人員非常友好的語言。此外,它還帶有許多有用的內建庫。Python 直譯器預裝在幾乎所有類 Unix 作業系統中。因此,Python 也是編寫可移植自動化指令碼的不錯選擇。
但是與其他語言相比,Python 的程式執行時間很慢。當您使用某些庫時,即使與 Bash 相比,Python 的執行速度也太慢。Shellpy 和Plumbum等工具提供了方便的 API 來處理程式和命令。但是,我們仍然需要設定和編寫一些額外的程式碼。
使用 JavaScript 編寫 Shell 指令碼
Nodejs 專案將 JavaScript 從瀏覽器沙箱中取出到作業系統級別。Nodejs 提供了子程式 API來生成新程式。此外,Nodejs 引入了幾個跨平臺 API 來處理檔案處理、網路和控制檯。現在,JavaScript 和 Nodejs 都包含製作現代自動化指令碼所需的所有功能。
Nodejs 本身並不像 Python 那樣支援二進位制程式。但是,您可以透過子程式 API 執行其他二進位制可執行檔案。檢視以下顯示處理器架構的示例:
#!/usr/bin/node let exec = require('child_process').exec; exec('arch', function(error, stdout, stderr) { console.log(`你電腦的 CPU 架構是 ${stdout}`); }); |
由於回撥函式,上面的 Nodejs 指令碼看起來不像 Shell 指令碼。因此,您必須做一些額外的工作,使其看起來像一個簡單的 Shell 指令碼。最近引入了Google 的zx專案,以使用基於 JavaScript 的 Shell 指令碼解決這個問題。我們確實可以簡化上面程式碼的語法,用zx編寫如下指令碼。
#!/usr/bin/env zx $.verbose = false let arch = await $`arch` console.log(`你電腦的 CPU 架構是 ${arch}`) |
zx 工具提供了編寫 Shell 指令碼所需的幾乎所有功能。JavaScript 的原生 JSON 支援是一個很棒的功能,可以製作豐富的現代 Shell 指令碼。但是,預設情況下,每個 CI/CD 引擎和流行的 Unix 或類 Unix 作業系統都不提供 Nodejs 執行時和包管理器。
哪個更好?
您可以根據以下事實和條件選擇 Bash、Python 或 JavaScript 來編寫 Shell 指令碼。
- 如果您需要頻繁地生成程式,並且需要為 Unix 或類 Unix 作業系統編寫一個稍微小巧的可移植 Shell 指令碼,那麼 Bash 無疑是一個不錯的選擇。例如,我編寫了一個 Bash指令碼來構建基於使用者輸入架構的開源專案的二進位制檔案。
- 如果你需要寫一個跨平臺的 Shell 指令碼來在執行一些命令的同時處理一些資料,你可以選擇 Python。例如,Electron 專案有一些 Python指令碼來處理和上傳檔案。但是,不要期望基於 Python 的 Shell 指令碼有如此高的效能。
- JavaScript 也適用於適合 Python 的場景。與 Python 相比,JavaScript 在編寫 Shell 指令碼方面有一些額外的優勢。JavaScript 速度很快,本機支援 JSON,並且具有令人印象深刻的內建功能。我從 React Native 儲存庫的指令碼目錄中找到了一些基於 Javascript 的 Shell 指令碼。
相關文章
- 工作流自動化和RPA自動化,哪個更適合你?
- 使用 Bash 自動執行復雜任務
- Python和R哪個更適合機器學習?Python機器學習
- 微任務和巨集任務哪個先執行
- python和Java哪個更適合web開發?PythonJavaWeb
- Python和Java,哪個更適合web開發?PythonJavaWeb
- GO VS Python,哪個更適合機器學習?GoPython機器學習
- PHP和Python哪個更適合Web開發?Python學習!PHPPythonWeb
- 自動執行任務crontab
- 自動化任務執行器 Grunt 迅速上手
- 開機自動執行python指令碼Python指令碼
- python自動化指令碼例項100條-自動化運維基礎例項解析-Python批量登入到伺服器執行任務...Python指令碼運維伺服器
- dotnet使用Selenium執行自動化任務
- CRM系統和釘釘哪個更適合企業?
- 10個Python指令碼來自動化你的日常任務Python指令碼
- windows 下建立自動執行任務Windows
- Python、Java、C、C++哪個更適合人工智慧?PythonJavaC++人工智慧
- 利用nodejs 執行多個js 指令碼,casperjs 同行執行多個任務NodeJS指令碼
- Tcl編寫迴圈執行某個任務的指令碼指令碼
- PuerTS和HybridCLR哪個更適合開發微信小遊戲遊戲
- UNIX crontab自動執行指令碼指令碼
- python和R語言哪個好?哪個適合資料分析?PythonR語言
- linux中計劃任務執行指令碼Linux指令碼
- Windows、Mac與Linux哪個更適合開發者?WindowsMacLinux
- Linux管理指令碼之自動執行指令碼Linux指令碼
- Python和Web前端選擇哪個比較合適?哪個前景好?PythonWeb前端
- 海外動態IP和海外靜態IP:哪種更適合您?
- bash shell指令碼執行方法總結指令碼
- python和C++語言有何優缺點?哪個更適合人工智慧?PythonC++人工智慧
- Python和Web前端選擇哪個比較合適?PythonWeb前端
- 看板與Scrum:哪個更適合你的團隊?Scrum
- 哪個平臺更適合iOS超級簽名?iOS
- 如何使用ChatGPT來自動化Python任務ChatGPTPython
- [自動化執行]沒用過Ansible,你的自動化任務會考慮用它嗎?
- 用python寫一個自動化盲註指令碼Python指令碼
- python+robotframework --第一個UI自動化指令碼PythonFrameworkUI指令碼
- centos 自動啟動指令碼和自啟動服務CentOS指令碼
- 啟動vi時自動執行的指令碼指令碼