คู่มือสำหรับผู้เริ่มต้นใช้งานเชลล์สคริปต์: พื้นฐาน

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

เชลล์สคริปต์คืออะไร?

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

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

เชลล์สคริปต์ช่วยให้เราสามารถตั้งโปรแกรมคำสั่งในเครือข่ายและให้ระบบดำเนินการเป็นเหตุการณ์ที่มีสคริปต์เช่นเดียวกับไฟล์แบตช์ นอกจากนี้ยังอนุญาตให้มีฟังก์ชันที่มีประโยชน์มากขึ้นเช่นการทดแทนคำสั่ง คุณสามารถเรียกใช้คำสั่งเช่นวันที่และใช้ผลลัพธ์เป็นส่วนหนึ่งของโครงร่างการตั้งชื่อไฟล์ คุณสามารถสำรองข้อมูลอัตโนมัติและไฟล์ที่คัดลอกแต่ละไฟล์สามารถมีวันที่ปัจจุบันต่อท้ายชื่อได้ สคริปต์ไม่ได้เป็นเพียงแค่การเรียกใช้คำสั่งเท่านั้น พวกเขาเป็นโปรแกรมในสิทธิของตนเอง การเขียนสคริปต์ช่วยให้คุณสามารถใช้ฟังก์ชันการเขียนโปรแกรมเช่นคำสั่ง 'for' คำสั่ง if / then / else และอื่น ๆ ได้โดยตรงภายในอินเทอร์เฟซของระบบปฏิบัติการของคุณ และคุณไม่จำเป็นต้องเรียนรู้ภาษาอื่นเพราะคุณใช้สิ่งที่คุณรู้อยู่แล้ว: บรรทัดคำสั่ง

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

ก่อนเริ่มต้น

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

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

ที่แกนหลักสคริปต์เป็นเพียงไฟล์ข้อความธรรมดา คุณสามารถใช้โปรแกรมแก้ไขข้อความใดก็ได้เพื่อเขียน: gedit, emacs, vim, nano …รายการนี้จะดำเนินต่อไป อย่าลืมบันทึกเป็นข้อความธรรมดาไม่ใช่ Rich Text หรือเอกสาร Word เนื่องจากฉันชอบความง่ายในการใช้งานที่นาโนมีให้ฉันจะใช้สิ่งนั้น

สิทธิ์และชื่อสคริปต์

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

chmod + x ~ / somecrazyfolder / สคริปต์

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

chmod u + x ~ / somecrazyfolder / สคริปต์

ในการรันสคริปต์นี้คุณจะต้อง cd ลงในไดเร็กทอรีที่เหมาะสมจากนั้นจึงรันสคริปต์ดังนี้:

cd ~ / somecrazyfolder

./script1

เพื่อให้สิ่งต่างๆสะดวกยิ่งขึ้นคุณสามารถวางสคริปต์ในโฟลเดอร์ "bin" ในไดเร็กทอรีหลักของคุณ:

~ / bin

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

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

[คำสั่ง] ใด

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

แนวทางการเขียนสคริปต์

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

  1. ทุกสคริปต์ควรมี“ #! / bin / bash”
  2. ทุกบรรทัดใหม่เป็นคำสั่งใหม่
  3. บรรทัดความคิดเห็นเริ่มต้นด้วย #
  4. คำสั่งล้อมรอบด้วย ()

แฮ็ก Hash-Bang

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

#! / bin / ทุบตี

หากคุณใช้เชลล์อื่นให้แทนที่พา ธ ที่นี่ บรรทัดความคิดเห็นเริ่มต้นด้วยแฮช (#) แต่การเพิ่มปัง (!) และเส้นทางเชลล์หลังจากนั้นเป็นการแฮ็กประเภทหนึ่งที่จะข้ามกฎความคิดเห็นนี้และจะบังคับให้สคริปต์ดำเนินการกับเชลล์ที่บรรทัดนี้ชี้ไป

บรรทัดใหม่ = คำสั่งใหม่

ทุกบรรทัดใหม่ควรถือเป็นคำสั่งใหม่หรือเป็นส่วนประกอบของระบบที่ใหญ่กว่า ตัวอย่างเช่นคำสั่ง if / then / else จะใช้เวลามากกว่าหลายบรรทัด แต่แต่ละองค์ประกอบของระบบนั้นอยู่ในบรรทัดใหม่ อย่าปล่อยให้คำสั่งหลุดเข้าไปในบรรทัดถัดไปเพราะอาจเป็นการตัดคำสั่งก่อนหน้าและทำให้คุณมีข้อผิดพลาดในบรรทัดถัดไป หากโปรแกรมแก้ไขข้อความของคุณกำลังทำเช่นนั้นคุณควรปิดการตัดข้อความเพื่อให้ปลอดภัย คุณสามารถปิดการตัดข้อความในนาโนบิตที่กดปุ่ม ALT + L

แสดงความคิดเห็นกับ #s

หากคุณเริ่มต้นบรรทัดด้วย # ระบบจะไม่สนใจบรรทัดนั้น สิ่งนี้จะเปลี่ยนเป็นบรรทัดความคิดเห็นซึ่งคุณสามารถเตือนตัวเองว่าผลลัพธ์ของคำสั่งก่อนหน้าคืออะไรหรือคำสั่งถัดไปจะทำอะไร ปิดการตัดข้อความอีกครั้งหรือแบ่งความคิดเห็นของคุณออกเป็นหลายบรรทัดซึ่งทั้งหมดขึ้นต้นด้วยแฮช การใช้ความคิดเห็นจำนวนมากถือเป็นแนวทางปฏิบัติที่ดีเนื่องจากจะช่วยให้คุณและผู้อื่นปรับแต่งสคริปต์ของคุณได้ง่ายขึ้น ข้อยกเว้นประการเดียวคือแฮ็ก Hash-Bang ดังกล่าวข้างต้นดังนั้นอย่าติดตาม #s with! s ;-)

คำสั่งล้อมรอบด้วยวงเล็บ

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

สคริปต์แรกของคุณ

เริ่มจากสคริปต์ง่ายๆที่ให้คุณคัดลอกไฟล์และต่อท้ายวันที่ต่อท้ายชื่อไฟล์ เรียกว่า "datecp" ก่อนอื่นให้ตรวจสอบว่าชื่อนั้นขัดแย้งกับบางสิ่งหรือไม่:

คุณจะเห็นว่าไม่มีผลลัพธ์ของคำสั่งใดดังนั้นเราทุกคนพร้อมที่จะใช้ชื่อนี้

มาสร้างไฟล์เปล่าในโฟลเดอร์ ~ / bin:

สัมผัส ~ / bin / datecp

และเรามาเปลี่ยนสิทธิ์กันก่อนที่เราจะลืม:

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

นาโน ~ / bin / datecp

และเรามาใส่บรรทัดแรกที่จำเป็นต้องมีก่อนและแสดงความคิดเห็นเกี่ยวกับสิ่งที่สคริปต์นี้ทำ

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

เราจะใส่อะไรในตัวแปร? มาเก็บวันเวลากันดีกว่า! ในการดำเนินการนี้เราจะเรียกใช้คำสั่ง date

ดูภาพหน้าจอด้านล่างสำหรับวิธีสร้างผลลัพธ์ของคำสั่ง date:

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

ลองใช้การวนซ้ำครั้งสุดท้ายของคำสั่ง date“ date +% m_% d_% y-% H. % M. % S” และใช้คำสั่งนั้นในสคริปต์ของเรา

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

แต่เรามาทำสิ่งที่แตกต่างกัน ให้ชื่อตัวแปรเช่น date_formatted สำหรับคำสั่งนี้ ไวยากรณ์ที่เหมาะสมสำหรับสิ่งนี้มีดังนี้:

ตัวแปร = $ (อาร์กิวเมนต์คำสั่ง - ตัวเลือก)

และสำหรับเราเราจะสร้างสิ่งนี้:

date_formatted = $ (วันที่ +% m_% d_% y-% H. % M. % S)

นี่คือสิ่งที่เราเรียกว่าการทดแทนคำสั่ง โดยพื้นฐานแล้วเรากำลังบอก bash ว่าเมื่อใดก็ตามที่ตัวแปร“ date_formatted” ปรากฏขึ้นให้รันคำสั่งภายในวงเล็บ จากนั้นผลลัพธ์ใดก็ตามที่คำสั่งให้ควรจะแสดงแทนชื่อของตัวแปร“ date_formatted”

นี่คือตัวอย่างสคริปต์และผลลัพธ์:

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

กลับไปที่สคริปต์ของเรากันเถอะ ต่อไปให้เพิ่มในส่วนการคัดลอกของคำสั่ง

cp –iv $ 1 $ 2. $ date_formatted

ซึ่งจะเรียกใช้คำสั่ง copy โดยมีตัวเลือก –i และ –v ก่อนหน้านี้จะขอให้คุณตรวจสอบก่อนที่จะเขียนทับไฟล์และไฟล์หลังจะแสดงสิ่งที่อยู่ในบรรทัดคำสั่ง

จากนั้นคุณจะเห็นว่าฉันได้เพิ่มตัวเลือก“ $ 1” แล้ว เมื่อเขียนสคริปต์เครื่องหมายดอลลาร์ ($) ตามด้วยตัวเลขจะแสดงว่าอาร์กิวเมนต์ที่มีหมายเลขของสคริปต์เมื่อถูกเรียกใช้ ตัวอย่างเช่นในคำสั่งต่อไปนี้:

cp –iv Trogdor2.mp3 ringtone.mp3

อาร์กิวเมนต์แรกคือ "Trogdor2.mp3" และอาร์กิวเมนต์ที่สองคือ "ringtone.mp3"

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

ซึ่งหมายความว่าเมื่อเรารันสคริปต์เราจะต้องระบุอาร์กิวเมนต์สองรายการเพื่อให้สคริปต์ทำงานได้อย่างถูกต้อง อาร์กิวเมนต์แรก $ 1 คือไฟล์ที่จะถูกคัดลอกและถูกแทนที่เป็นอาร์กิวเมนต์แรกของคำสั่ง“ cp –iv”

อาร์กิวเมนต์ที่สอง $ 2 จะทำหน้าที่เป็นไฟล์เอาต์พุตสำหรับคำสั่งเดียวกัน แต่คุณจะเห็นว่ามันแตกต่างกัน เราได้เพิ่มช่วงเวลาและได้อ้างอิงตัวแปร“ date_formatted” จากด้านบน อยากรู้ว่าสิ่งนี้ทำอย่างไร?

นี่คือสิ่งที่เกิดขึ้นเมื่อเรียกใช้สคริปต์:

คุณจะเห็นว่าไฟล์เอาต์พุตแสดงรายการเป็นสิ่งที่ฉันป้อนในราคา $ 2 ตามด้วยช่วงเวลาจากนั้นผลลัพธ์ของคำสั่ง date! เข้าท่าใช่มั้ย?

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

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

คุณสคริปต์? มีคำแนะนำสำหรับมือใหม่หรือไม่? แบ่งปันความคิดของคุณในความคิดเห็น! มีอะไรอีกมากมายที่จะมาในซีรีส์นี้!