Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม BASH

เริ่มต้นกับการเขียนโปรแกรม Bash

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

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

วิธีเรียนรู้การเขียนโปรแกรม

หากคุณไม่เคยเขียนโปรแกรมมาก่อน การคิดในแง่ของความท้าทายที่แตกต่างกันสองอย่าง อาจช่วยได้ อย่างหนึ่งคือการทำความเข้าใจวิธีเขียนโค้ด และอีกวิธีหนึ่งคือการทำความเข้าใจว่าต้องเขียนโค้ดอะไร คุณสามารถเรียนรู้ ไวยากรณ์ —แต่คุณจะไปได้ไม่ไกลถ้าไม่รู้ว่ามีคำศัพท์อะไรบ้างในภาษา . ในทางปฏิบัติ คุณเริ่มเรียนรู้ทั้งสองแนวคิดพร้อมกันเพราะคุณไม่สามารถเรียนรู้ไวยากรณ์ได้หากไม่มีคำที่จะจัดเรียง ดังนั้นในขั้นแรก คุณต้องเขียนงานง่ายๆ โดยใช้คำสั่งพื้นฐานและโครงสร้างการเขียนโปรแกรมพื้นฐาน เมื่อคุณรู้สึกสบายใจกับพื้นฐานแล้ว คุณสามารถสำรวจภาษาเพิ่มเติมเพื่อให้โปรแกรมของคุณทำสิ่งที่สำคัญมากขึ้นได้

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

การออกแบบเชิงโต้ตอบ

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

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

ตัวอย่างเช่น ครั้งหนึ่งฉันเคยได้รับมอบหมายให้แปลงหนังสือ PDF จำนวนมากเป็นเวอร์ชันที่ใช้หมึกน้อยและเป็นมิตรกับเครื่องพิมพ์ วิธีหนึ่งในการทำเช่นนี้คือการเปิด PDF ในตัวแก้ไข PDF เลือกแต่ละภาพจากหลายร้อยภาพ—พื้นหลังของหน้าและพื้นผิวที่นับเป็นภาพ—ลบออก แล้วบันทึกลงใน PDF ใหม่ หนังสือเล่มเดียวจะใช้เวลาครึ่งวันด้วยวิธีนี้

ความคิดแรกของฉันคือการเรียนรู้วิธีการเขียนสคริปต์โปรแกรมแก้ไข PDF แต่หลังจากค้นคว้ามาหลายวัน ฉันไม่พบแอปพลิเคชันแก้ไข PDF ที่สามารถเขียนสคริปต์ได้ (นอกเหนือจากการแฮ็กเมาส์อัตโนมัติที่น่าเกลียดมาก) ดังนั้นฉันจึงหันความสนใจไปที่การค้นหาเพื่อทำงานให้สำเร็จจากภายในเทอร์มินัล ส่งผลให้เกิดการค้นพบใหม่ๆ มากมาย รวมถึง GhostScript ซึ่งเป็นเวอร์ชันโอเพนซอร์สของ PostScript (ภาษา PDF ของเครื่องพิมพ์อิงตาม) เมื่อใช้ GhostScript กับงานนี้เป็นเวลาสองสามวัน ฉันยืนยันว่านี่เป็นวิธีแก้ไขปัญหาของฉัน

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

ส่งผ่านอาร์กิวเมนต์ไปยังสคริปต์ทุบตี

ความแตกต่างระหว่างการรันคำสั่งในเทอร์มินัลและการรันคำสั่งในเชลล์สคริปต์คือคำสั่งก่อนหน้านี้เป็นแบบโต้ตอบ ในเทอร์มินัล คุณสามารถปรับเปลี่ยนสิ่งต่างๆ ได้ตามต้องการ ตัวอย่างเช่น ถ้าฉันเพิ่งประมวลผล example_1.pdf และพร้อมที่จะดำเนินการกับเอกสารถัดไป เพื่อปรับคำสั่งของฉัน ฉันต้องเปลี่ยนชื่อไฟล์เท่านั้น

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

ในเชลล์สคริปต์ มีตัวแปรที่กำหนดไว้ล่วงหน้าสองสามตัวที่สะท้อนว่าสคริปต์เริ่มต้นอย่างไร ตัวแปรเริ่มต้นคือ $0 และแสดงถึงคำสั่งที่ออกให้เริ่มสคริปต์ ตัวแปรถัดไปคือ $1 ซึ่งแสดงถึง "อาร์กิวเมนต์" แรกที่ส่งผ่านไปยังเชลล์สคริปต์ ตัวอย่างเช่น ในคำสั่ง echo สวัสดี , คำสั่ง ก้อง คือ $0, และคำว่า สวัสดี คือ $1 . ในคำสั่ง echo สวัสดีชาวโลก , คำสั่ง ก้อง คือ $0 , สวัสดี คือ $1 และ โลก คือ $2 .

ในเชลล์แบบโต้ตอบ:

$ echo hello world
hello world

ในเชลล์สคริปต์ที่ไม่โต้ตอบ คุณ สามารถ ทำสิ่งเดียวกันด้วยวิธีที่แท้จริง พิมพ์ข้อความนี้ลงในไฟล์ข้อความและบันทึกเป็น hello.sh :

echo hello world

ตอนนี้เรียกใช้สคริปต์:

$ bash hello.sh
hello world

ใช้งานได้ แต่ไม่ได้ใช้ประโยชน์จากความจริงที่ว่าสคริปต์สามารถรับข้อมูลได้ เปลี่ยน hello.sh ถึงสิ่งนี้:

echo $1

เรียกใช้สคริปต์ด้วยสองอาร์กิวเมนต์ที่จัดกลุ่มเข้าด้วยกันเป็นหนึ่งด้วยเครื่องหมายอัญประกาศ:

$ bash hello.sh "hello bash"
hello bash

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

การควบคุมการไหล

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

  • ถ้า/แล้ว
  • สำหรับลูป
  • ขณะวนซ้ำ
  • คำชี้แจงกรณี

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

$ bash hello.sh foo
foo
$ bash hello.sh

$

มันจะเป็นมิตรกับผู้ใช้มากขึ้นหากมีข้อความช่วยเหลือเมื่อไม่ได้รับอินพุต นั่นคือคำสั่ง if/then และหากคุณใช้ Bash ในลักษณะพื้นฐาน คุณอาจไม่รู้ว่ามีคำสั่งดังกล่าวอยู่ใน Bash แต่ส่วนหนึ่งของการเขียนโปรแกรมคือการเรียนรู้ภาษา และด้วยการค้นคว้าเพียงเล็กน้อย คุณจะได้เรียนรู้เกี่ยวกับคำสั่ง if/then:

if [ "$1" = "" ]; then
        echo "syntax: $0 WORD"
        echo "If you provide more than one word, enclose them in quotes."
else
        echo "$1"
fi

กำลังใช้งาน hello.shเวอร์ชันใหม่นี้ ผลลัพธ์ใน:

$ bash hello.sh 
syntax: hello.sh WORD
If you provide more than one word, enclose them in quotes.
$ bash hello.sh "hello world"
hello world

ทำงานผ่านสคริปต์

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

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

อีกวิธีหนึ่งคือดาวน์โหลดข้อมูลเบื้องต้นเกี่ยวกับการเขียนโปรแกรมด้วย Bash eBook มันแนะนำให้คุณรู้จักกับแนวคิดการเขียนโปรแกรมเฉพาะสำหรับ Bash และด้วยโครงสร้างที่คุณเรียนรู้ คุณสามารถเริ่มสร้างคำสั่งของคุณเองได้ และแน่นอน คุณสามารถดาวน์โหลดและรับใบอนุญาตภายใต้ใบอนุญาต Creative Commons ได้ฟรี ดังนั้นคว้าสำเนาของคุณวันนี้เลย

ดาวน์โหลดข้อมูลเบื้องต้นเกี่ยวกับการเขียนโปรแกรมด้วย Bash eBook!