Bash vs. Python: สำหรับการเขียนสคริปต์เชลล์สมัยใหม่

การเปรียบเทียบตัวเลือก Bash และ Python สำหรับข้อกำหนดระบบอัตโนมัติสมัยใหม่

ภาพถ่ายโดย Kari Shea บน Unsplash ตัดต่อด้วย Canva

คอมพิวเตอร์เป็นอุปกรณ์ดิจิทัลที่สามารถเข้าใจคำสั่งไบนารีที่เฉพาะเจาะจงเท่านั้น หากไม่มีระบบปฏิบัติการ เราสามารถใช้เฟิร์มแวร์ในตัวบางตัวเท่านั้น เช่น ยูทิลิตี้ BIOS ในคอมพิวเตอร์ ระบบปฏิบัติการทำให้คอมพิวเตอร์ใช้งานได้โดยนำเสนอวิธีการรันโปรแกรมที่พัฒนาไว้ล่วงหน้า (เช่น โปรแกรมประมวลผลคำ เว็บเบราว์เซอร์ และโปรแกรมอรรถประโยชน์) ระบบปฏิบัติการส่วนใหญ่ในปัจจุบันอนุญาตให้ผู้ใช้ใช้ GUI (Graphical User Interface) และ CLI (Command Line Interface)

โปรแกรมเมอร์มักจะชอบทำงานกับ CLI เนื่องจากการใช้ CLI นั้นใกล้เคียงกับกิจกรรมการเขียนโปรแกรมแบบวันต่อวันมากกว่า GUI พวกเขามักจะปรับใช้ซอฟต์แวร์ ดำเนินการกับระบบไฟล์ และกำหนดค่าระบบคอมพิวเตอร์ผ่าน CLIs CLI เป็นวิธีที่มีประสิทธิภาพในการทำงานทั้งหมด แต่บ่อยครั้งเราต้องใช้คำสั่งเดียวกันกับที่เราป้อนด้วยการแก้ไขเล็กน้อย

เป็นผลให้ล่าม CLI เสนอแนวคิดการเขียนสคริปต์เชลล์เพื่อรันคำสั่งที่เขียนไว้ล่วงหน้าจากไฟล์ Bash เป็นภาษาคำสั่งแบบดั้งเดิมที่รู้จักกันดีในตัว (ในระบบปฏิบัติการส่วนใหญ่) สำหรับการเรียกใช้เชลล์สคริปต์ ในทางกลับกัน โปรแกรมเมอร์จำนวนมากใช้ Python เป็นทางเลือกในการเขียนสคริปต์เชลล์ที่มาพร้อมกับคุณสมบัติในตัวที่ Bash ไม่มี (ไม่เคย) นำเสนอ

ในเรื่องนี้ ฉันจะเปรียบเทียบ Bash และ Python จากมุมมองของเชลล์สคริปต์ และอธิบายเทคนิคเชลล์สคริปต์ที่รู้จักกันน้อยเพื่อให้คุณพัฒนาทักษะการทำงานอัตโนมัติด้วย Bash และ Python

Bash: วิธีที่เป็นธรรมชาติที่สุดสำหรับการเขียนเชลล์สคริปต์

แนวคิดหลักที่อยู่เบื้องหลังการเขียนสคริปต์เชลล์คือการเรียกใช้ลำดับคำสั่งที่เขียนไว้ล่วงหน้าด้วยตัวแปลเชลล์ Bash ถือว่าทุกอินพุต/คำสั่งเป็นคำสั่งและนำเสนอวิธีการที่มีประสิทธิผลสำหรับการทำงานอัตโนมัติ จำวันแรกที่คุณใช้เทอร์มินัลที่ใช้ Bash (บางทีเมื่อคุณอยู่ที่วิทยาลัย) โดยไม่ต้องอ่านเอกสารประกอบหรือทำตามบทช่วยสอน:

เตือนประสบการณ์เทอร์มินัลที่ใช้ Bash ครั้งแรกของคุณ ภาพหน้าจอโดยผู้เขียน

Bash ไม่ทำงานเหมือนภาษาสำหรับใช้งานทั่วไป — มันกระตุ้นให้คุณใช้โปรแกรมอื่นเสมอ ตัวอย่างเช่น คุณอาจใช้expr 10 + 15สำหรับสถานการณ์ข้างต้น อย่างไรก็ตาม Bash สมัยใหม่รองรับคุณสมบัติในตัวสำหรับข้อกำหนดการเขียนโปรแกรมทั่วไป ดังนั้นคุณไม่จำเป็นต้องเรียกโปรแกรมอื่นในบางสถานการณ์

ตัวอย่างเช่น มันให้คุณดำเนินการเลขคณิตพื้นฐานผ่าน คุณสมบัติ การขยายเลขคณิต :

ใช้การขยายเลขคณิตในเทอร์มินัล ภาพหน้าจอโดยผู้เขียน

Bash เรียกใช้คำสั่งโดยกำเนิดโดยไม่มีไวยากรณ์เพิ่มเติมโดยเฉพาะและนำเสนอไวยากรณ์ขั้นต่ำสำหรับความต้องการในการเขียนโปรแกรมทั่วไป

Python: วิธีสมัยใหม่ที่แก้ไขฟีเจอร์ที่ขาดหายไปใน Bash

ถ้า Bash เรียกใช้คำสั่งโดยกำเนิดและรองรับคุณสมบัติการเขียนโปรแกรมเพื่อวัตถุประสงค์ทั่วไปมากมาย เหตุใดโปรแกรมเมอร์จึงใช้ Python สำหรับการทำงานอัตโนมัติ ดูเอกสาร ประกอบ Python ย้อน หลังจากรีลีสแรก ๆ ต่อไปนี้:

เอกสาร Python รุ่นแรกที่เขียนด้วย LaTeX ภาพหน้าจอโดยผู้เขียน

ตามเอกสารนี้ Python ได้รับการพัฒนาในขั้นต้นเพื่อรวมการเขียนสคริปต์เชลล์กับการเขียนโปรแกรมระดับระบบปฏิบัติการดั้งเดิม Bash ไม่สามารถเข้าถึง API ระดับระบบปฏิบัติการ (หรือที่เรียกว่า C API) ได้ ดังนั้น หากสคริปต์การทำงานอัตโนมัติต้องการการเข้าถึง C API โปรแกรมเมอร์จึงต้องใช้วิธีแก้ไขปัญหาชั่วคราว เช่น การสร้างไฟล์เรียกทำงานด้วยภาษาโปรแกรมอื่น Python แก้ไขปัญหานี้โดยเสนอภาษาขั้นต่ำที่เป็นมิตรต่อการทำงานอัตโนมัติด้วยการเข้าถึง C API แม้ว่าจะใช้วิธีข้ามแพลตฟอร์มเพื่อเข้าถึง API ระดับระบบปฏิบัติการก็ตาม

Python ประเมินแหล่งที่มาจากมุมมองการ เขียนโปรแกรมเพื่อวัตถุประสงค์ทั่วไป ดังนั้นมันจึงไม่สามารถรันโปรแกรมอื่นได้ตามปกติ แต่เสนอ API กระบวนการย่อย ที่เป็นมิตรต่อนักพัฒนา

เราได้ตรวจสอบทั้งเป้าหมายและพื้นฐานของภาษา เริ่มต้นด้วยการเปรียบเทียบ!

Bash vs. Python: อะไรดีกว่าสำหรับการทำงานอัตโนมัติ?

โปรแกรมเมอร์เขียนเชลล์สคริปต์ต่างๆ บางครั้ง พวกเขาเขียนเชลล์สคริปต์ที่รันคำสั่ง POSIX หลายคำสั่ง (เช่นmv, cp, ฯลฯ) ในบางสถานการณ์ จำเป็นต้องรวมการประมวลผลข้อมูลและการดำเนินการระดับระบบปฏิบัติการไว้ในเชลล์สคริปต์ นอกจากนี้ บางครั้งพวกเขาจำเป็นต้องเขียนสคริปต์การทำงานอัตโนมัติข้ามแพลตฟอร์ม

เช่นเดียวกับการสรุปการเปรียบเทียบภาษาการเขียนโปรแกรมสมัยใหม่เกือบทั้งหมด ไม่มีผู้ชนะในที่นี้ — ตัวเลือกการเขียนสคริปต์เชลล์ที่ดีที่สุดขึ้นอยู่กับสถานการณ์การพัฒนาของเรา

Bash นั้นดีสำหรับสถานการณ์ต่อไปนี้:

  • การดำเนินการบรรทัดคำสั่ง POSIX โดยอัตโนมัติที่เกี่ยวข้องกับการประมวลผลข้อมูลน้อยลง เช่น สคริปต์การดูแลระบบ
  • การเขียนเชลล์สคริปต์ที่ดำเนินการกำหนดค่า ประมวลผล หรือดำเนินการเบ็ดเตล็ดผ่านโปรแกรม CLI อื่นๆ เช่น การเขียน ข้อความคอมมิต ของ Gitและการปรับใช้แอปผ่านเครื่องมือ CLI
  • หากคุณต้องการความสามารถในการพกพาที่มากขึ้นสำหรับสคริปต์ของคุณบนระบบ Unix Bash เป็นตัวเลือกที่ดีเนื่องจากตัวแปล Bash ได้รับการติดตั้งไว้ล่วงหน้าอย่างกว้างขวางกว่า Python
  • การทำงานอัตโนมัติที่เกี่ยวข้องกับการประมวลผลข้อมูล (การดำเนินการอัลกอริทึม) และการเข้าถึง API ระดับต่ำมากกว่าการดำเนินการโปรแกรม CLI อื่นๆ
  • การเขียนสคริปต์การทำงานอัตโนมัติข้ามแพลตฟอร์มที่รันคำสั่ง ใช้ API ระดับต่ำ และประมวลผลข้อมูลทั่วไปบน GNU/Linux, Windows, macOS และระบบปฏิบัติการอื่นๆ ที่รองรับ Python ดูแหล่งที่มาของ BuildZriเป็นตัวอย่างโครงการ

ใช้ Bash และ Python ร่วมกัน!

ไม่มีการแข่งขันที่รุนแรงระหว่าง Bash และ Python เนื่องจากเป็นภาษาโปรแกรมสองประเภทที่แตกต่างกัน — Bash เป็นภาษาคำสั่ง และ Python เป็นภาษาสำหรับใช้งานทั่วไป เราสามารถเลือกหนึ่งตัวเลือกตามความต้องการหรือใช้ทั้งสองอย่างก็ได้

สมมติว่าคุณใช้bcการบวกทศนิยมสองตำแหน่งดังนี้:

#!/bin/bash

sum=$(bc <<< "1.5 + 2.51")
echo $sum

#!/bin/bash

sum=$(python3 <<< "print(1.5 + 2.51)")
echo $sum

#!/usr/bin/env python3

import subprocess

gedit_pid = subprocess \
              .getoutput("ps -ef | grep gedit | head -1 | awk '{print $2}'") \
              .strip()
print(gedit_pid)

ดังที่เราได้พูดคุยกัน ทั้ง Bash และ Python มีข้อเสียบางประการสำหรับข้อกำหนดของระบบอัตโนมัติสมัยใหม่ การเขียนเชลล์สคริปต์ด้วยการเข้าถึง API ระดับระบบปฏิบัติการและการประมวลผลข้อมูลที่ซับซ้อนเป็นเรื่องยากสำหรับ Bash การเขียนการดำเนินการโปรแกรมบรรทัดคำสั่งขั้นต่ำนั้นไม่เหมือนเชลล์ใน Python ด้วยsubprocessAPI

หากคุณต้องการใช้ C APIs ใน Bash คุณสามารถใช้ctypes.shส่วนขยาย Bash ได้:

มีแม้แต่เว็บเซิร์ฟเวอร์ HTTP ที่httpd.shเขียนด้วย Bash โดยใช้ctypes.shforeign function interface ( FFI )

โปรpyshเจกต์นำเสนอวิธีง่ายๆ ในการดำเนินการคำสั่ง Bash ในสคริปต์ Python ด้วย>อักขระ ดังที่แสดงในข้อมูลโค้ดต่อไปนี้:

for i in xrange(100):
   index = "%02d" % i
   > mv from$index.txt to$index.txt

#! /usr/bin/env zxpy
~'echo Hello world!'

file_count = ~'ls -1 | wc -l'
print("file count is:", file_count)

แนวคิดการเขียนสคริปต์เชลล์เริ่มต้นด้วย เชลล์ Thompson ของสภาพแวดล้อม Unix ในช่วงปี 1970 แนวคิดเบื้องหลังการเขียนสคริปต์เชลล์แบบดั้งเดิมคือการดำเนินการกับบรรทัดคำสั่งจากไฟล์เพื่อวัตถุประสงค์ในการทำงานอัตโนมัติ ความเคลื่อนไหวของ DevOps สมัยใหม่ขยายแนวคิดการเขียนสคริปต์เชลล์แบบดั้งเดิมโดยรวมการเรียกใช้ RESTful API การประมวลผลข้อมูล และการดำเนินการอื่นๆ ที่เกี่ยวข้องกับ DevOps ในสคริปต์การทำงานอัตโนมัติ

การใช้ Bash เป็นตัวเลือกการเขียนสคริปต์เชลล์นั้นไม่ล้าสมัยสำหรับระบบอัตโนมัติสมัยใหม่ เนื่องจากมันช่วยให้คุณดำเนินการคำสั่งแบบเนทีฟโดยไม่มี API กระบวนการย่อยแยกต่างหาก (รวมอยู่ในแบบเนทีฟ) โปรแกรมเมอร์มักจะใช้ Python เป็นทางเลือก Bash สมัยใหม่สำหรับการทำงานอัตโนมัติหากพวกเขาดำเนินการอื่นมากกว่าการดำเนินการบรรทัดคำสั่งดั้งเดิม

เรียนรู้เทคนิคการเขียนสคริปต์ Bash สมัยใหม่จากเรื่องราวต่อไปนี้:

ตรวจสอบกรณีการใช้งาน Python ที่รู้จักกันน้อยจากเรื่องราวต่อไปนี้:

ขอบคุณที่อ่าน.

เพิ่มระดับการเข้ารหัส

ขอบคุณที่เป็นส่วนหนึ่งของชุมชนของเรา! ก่อนที่คุณจะไป:

  • ปรบมือให้กับเรื่องราวและติดตามผู้เขียน
  • ดูเนื้อหาเพิ่มเติมในสิ่งพิมพ์ Level Up Coding
  • หลักสูตรสัมภาษณ์การเข้ารหัสฟรี ⇒ ดูหลักสูตร
  • ติดตามเรา: Twitter | LinkedIn | จดหมายข่าว

Suggested posts

การค้นหาข้อมูลเกี่ยวกับชื่อโดเมน

ตัดตอนมาจาก Small, Sharp Software Tools โดย Brian P. Hogan

การค้นหาข้อมูลเกี่ยวกับชื่อโดเมน

เมื่อคุณส่งคำขอไปที่ facebook.com คอมพิวเตอร์ของคุณจะค้นหาชื่อโดเมนเพื่อแปลชื่อโดเมนนั้นเป็นที่อยู่ IP เพื่อให้คอมพิวเตอร์ของคุณสามารถเชื่อมต่อได้

เคล็ดลับสำหรับการเปลี่ยนไปสู่ความปลอดภัยทางไซเบอร์โดยไม่มีพื้นฐานทางเทคนิค

เคล็ดลับสำหรับการเปลี่ยนไปสู่ความปลอดภัยทางไซเบอร์โดยไม่มีพื้นฐานทางเทคนิค

ในปี 2022 ฉันเปลี่ยนจากบทบาทที่ไม่ใช่ด้านเทคนิคมาเป็นความปลอดภัยทางไซเบอร์ ฉันได้รับปริญญาใบแรกในภาษาเยอรมัน ฉันรู้ว่าคุณตกใจและสงสัยว่าฉันสามารถเปลี่ยนแปลงได้สำเร็จได้อย่างไร มันเพิ่งเกิดขึ้น

Related posts

ชีวิตไร้ขีดจำกัด

เมื่อคุณโตขึ้น คุณมักจะได้รับการบอกว่าโลกเป็นอย่างที่มันเป็น และชีวิตของคุณก็แค่ใช้ชีวิตอยู่ในโลก ไม่เสี่ยงชีวิต แค่เดินตามเส้นทางที่กำหนดและตายในที่สุด และพยายามอย่า ทุบกำแพงมากเกินไป แต่นั่นเป็นชีวิตที่จำกัดมาก

การรวบรวม OSINT เพื่อการล่าภัยคุกคาม

การรวบรวม OSINT เพื่อการล่าภัยคุกคาม

สวัสดีชาวไซเบอร์! ยินดีต้อนรับกลับสู่ OSINT สำหรับซีรี่ส์การล่าภัยคุกคาม ในบทความแรก ฉันได้ให้ภาพรวมของ OSINT และความสำคัญในการตามล่าภัยคุกคาม

สรรพนามน่ากลัวมาก

มันทำให้ฉันประหลาดใจ ทันใดนั้นมันก็เกิดขึ้นบ่อยๆ มันอยู่กลางทางอีกครั้ง <ไม่ ไม่ใช่คนในมหาสมุทรแปซิฟิก คุณเป็นสีน้ำตาลแดง คนที่งานคาร์นิวัล> ทุกพาดหัวข่าวดัง…..

ทำไมฟรีแลนซ์บางคนแกล้งทำชีวิตของพวกเขา

ทำไมฟรีแลนซ์บางคนแกล้งทำชีวิตของพวกเขา

เมื่อเร็วๆ นี้ฉันใช้ Linkedin ซึ่งเป็นโซเชียลเน็ตเวิร์กระดับมืออาชีพที่ใหญ่ที่สุดในโลก และพบโพสต์จากนักออกแบบอิสระที่ฉันติดตามซึ่งดึงดูดความสนใจของฉัน พวกเขาทั้งหมดโพสต์ภาพถ่ายจากบนเครื่องบิน บนชายหาดพร้อมแล็ปท็อป จากสระว่ายน้ำ และสำนักงานที่มีทิวทัศน์สวยงาม