คู่มือสำหรับผู้เริ่มต้นใช้งาน Shell Scripting The Basics
คำว่า“ shell scripting” มักถูกกล่าวถึงในฟอรัม Linux แต่ผู้ใช้หลายคนไม่คุ้นเคย การเรียนรู้วิธีการเขียนโปรแกรมที่ง่ายและมีประสิทธิภาพนี้สามารถช่วยคุณประหยัดเวลาเรียนรู้บรรทัดคำสั่งได้ดีขึ้นและกำจัดงานการจัดการไฟล์ที่น่าเบื่อ.
Shell Scripting คืออะไร?
การเป็นผู้ใช้ลีนุกซ์หมายความว่าคุณสามารถใช้บรรทัดคำสั่งได้ ชอบหรือไม่มีบางสิ่งที่ทำได้ง่ายกว่าผ่านอินเทอร์เฟซนี้มากกว่าโดยการชี้และคลิก ยิ่งคุณใช้และเรียนรู้บรรทัดคำสั่งมากเท่าไหร่คุณก็ยิ่งมองเห็นศักยภาพของมันมากขึ้นเท่านั้น ดีบรรทัดคำสั่งตัวเองเป็นโปรแกรม: เปลือก Linux distros วันนี้ส่วนใหญ่ใช้ Bash และนี่คือสิ่งที่คุณกำลังป้อนคำสั่งจริงๆ.
ตอนนี้บางคนที่ใช้ Windows ก่อนที่จะใช้ Linux อาจจำไฟล์แบตช์ เหล่านี้เป็นไฟล์ข้อความเล็ก ๆ ที่คุณสามารถเติมคำสั่งเพื่อดำเนินการและ Windows จะเรียกใช้พวกเขาในทางกลับกัน มันเป็นวิธีที่ฉลาดและเรียบร้อยในการทำบางสิ่งเช่นเล่นเกมในห้องปฏิบัติการคอมพิวเตอร์ในโรงเรียนมัธยมของคุณเมื่อคุณไม่สามารถเปิดโฟลเดอร์ระบบหรือสร้างทางลัด แบทช์ไฟล์ใน Windows ในขณะที่มีประโยชน์จะเป็นการเลียนแบบเชลล์สคริปต์ราคาถูก.
เชลล์สคริปช่วยให้เราสามารถเขียนคำสั่งโปรแกรมเป็นกลุ่มและให้ระบบดำเนินการเป็นเหตุการณ์สคริปต์เหมือนไฟล์แบทช์ พวกเขายังอนุญาตให้ใช้งานฟังก์ชันที่มีประโยชน์มากกว่าเช่นการทดแทนคำสั่ง คุณสามารถเรียกใช้คำสั่งเช่นวันที่และใช้มันเป็นส่วนหนึ่งของรูปแบบการตั้งชื่อไฟล์ คุณสามารถทำการสำรองข้อมูลโดยอัตโนมัติและไฟล์ที่คัดลอกแต่ละไฟล์สามารถมีวันที่ปัจจุบันต่อท้ายชื่อ สคริปต์ไม่ใช่เพียงแค่การเรียกใช้คำสั่งเท่านั้น พวกเขาเป็นโปรแกรมที่ถูกต้อง การเขียนสคริปต์ช่วยให้คุณใช้ฟังก์ชั่นการเขียนโปรแกรม - เช่น 'for' ลูป, if / then / else statement และอื่น ๆ - โดยตรงภายในอินเทอร์เฟซของระบบปฏิบัติการของคุณ และคุณไม่จำเป็นต้องเรียนรู้ภาษาอื่นเพราะคุณใช้สิ่งที่คุณรู้อยู่แล้วนั่นคือบรรทัดคำสั่ง.
ฉันคิดว่านั่นเป็นพลังของการเขียนสคริปต์ คุณได้รับโปรแกรมด้วยคำสั่งที่คุณทราบแล้วในขณะที่การเรียนรู้ภาษาหลัก ๆ ต้องการทำสิ่งที่ซ้ำ ๆ และน่าเบื่อ? สคริปต์มัน! ต้องการทางลัดสำหรับคำสั่งที่ซับซ้อนหรือไม่? สคริปต์มัน! ต้องการสร้างอินเตอร์เฟสบรรทัดคำสั่งที่ใช้งานง่ายสำหรับบางสิ่ง สคริปต์มัน!
ก่อนที่คุณจะเริ่ม
ก่อนที่เราจะเริ่มต้นชุดสคริปต์ของเราเราจะครอบคลุมข้อมูลพื้นฐานบางอย่าง เราจะใช้ bash shell ซึ่งลีนุกซ์ส่วนใหญ่ใช้โดยกำเนิด Bash พร้อมใช้งานสำหรับผู้ใช้ Mac OS และ Cygwin บน Windows เช่นกัน เนื่องจากเป็นสากลคุณจึงควรสคริปต์ไม่ว่าแพลตฟอร์มของคุณจะเป็นอย่างไร นอกจากนี้ตราบใดที่คำสั่งทั้งหมดที่อ้างถึงมีอยู่สคริปต์สามารถทำงานได้บนหลายแพลตฟอร์มโดยไม่จำเป็นต้องปรับแต่งเล็กน้อย.
การเขียนสคริปต์สามารถใช้สิทธิ์“ ผู้ดูแลระบบ” หรือ“ superuser” ได้อย่างง่ายดายดังนั้นควรทดสอบสคริปต์ก่อนที่จะนำไปใช้งาน ใช้สามัญสำนึกเช่นตรวจสอบให้แน่ใจว่าคุณได้สำรองไฟล์ที่คุณกำลังจะเรียกใช้สคริปต์ สิ่งสำคัญคือการใช้ตัวเลือกที่เหมาะสมเช่น -i สำหรับคำสั่ง rm เพื่อให้การโต้ตอบของคุณเป็นสิ่งจำเป็น สิ่งนี้สามารถป้องกันข้อผิดพลาดที่น่ารังเกียจบางอย่าง ดังนั้นให้อ่านสคริปต์ที่คุณดาวน์โหลดและระมัดระวังข้อมูลที่คุณมีในกรณีที่เกิดข้อผิดพลาด.
ที่แกนกลางของพวกเขาสคริปต์เป็นเพียงไฟล์ข้อความธรรมดา คุณสามารถใช้โปรแกรมแก้ไขข้อความเพื่อเขียน: gedit, emacs, vim, nano ... รายการนี้ดำเนินต่อไป เพียงให้แน่ใจว่าได้บันทึกเป็นข้อความธรรมดาไม่ใช่ข้อความสมบูรณ์หรือเอกสาร Word เนื่องจากฉันชอบความสะดวกในการใช้งานที่นาโนให้ฉันจะใช้มัน.
สิทธิ์สคริปต์และชื่อ
สคริปต์ถูกเรียกใช้งานเหมือนโปรแกรมและเพื่อให้สิ่งนี้เกิดขึ้นพวกเขาจำเป็นต้องได้รับการอนุญาตที่เหมาะสม คุณสามารถทำให้สคริปต์เรียกทำงานได้โดยการรันคำสั่งต่อไปนี้:
chmod + x ~ / somecrazyfolder / script1
วิธีนี้จะทำให้ทุกคนสามารถเรียกใช้สคริปต์นั้นได้ หากคุณต้องการ จำกัด การใช้งานเฉพาะผู้ใช้ของคุณคุณสามารถใช้สิ่งนี้แทน:
chmod u + x ~ / somecrazyfolder / script1
ในการเรียกใช้สคริปต์นี้คุณจะต้อง cd ลงในไดเรกทอรีที่เหมาะสมจากนั้นเรียกใช้สคริปต์ดังนี้:
cd ~ / somecrazyfolder
./ script1
เพื่อให้สิ่งต่าง ๆ สะดวกยิ่งขึ้นคุณสามารถวางสคริปต์ในโฟลเดอร์“ bin” ในโฮมไดเร็กตอรี่ของคุณ:
~ / bin
ใน distros ที่ทันสมัยหลาย ๆ โฟลเดอร์นี้จะไม่ถูกสร้างโดยค่าเริ่มต้น แต่คุณสามารถสร้างมันได้ นี่คือที่จัดเก็บไฟล์เรียกใช้งานที่เป็นของผู้ใช้ของคุณและไม่ใช่กับผู้ใช้รายอื่น ด้วยการวางสคริปต์ที่นี่คุณสามารถเรียกใช้งานได้โดยพิมพ์ชื่อเหมือนคำสั่งอื่น ๆ แทนที่จะต้องทำซีดีและใช้คำนำหน้า './'.
อย่างไรก็ตามก่อนที่คุณจะตั้งชื่อสคริปต์คุณควรใช้คำสั่งต่อไปนี้เพื่อตรวจสอบว่าคุณได้ติดตั้งโปรแกรมที่ใช้ชื่อนั้นหรือไม่:
อันไหน [คำสั่ง]
ผู้คนมากมายตั้งชื่อสคริปต์เริ่มต้นของพวกเขา“ ทดสอบ” และเมื่อพวกเขาพยายามเรียกใช้ในบรรทัดคำสั่งไม่มีอะไรเกิดขึ้น นี่เป็นเพราะมันขัดแย้งกับคำสั่งทดสอบซึ่งไม่ทำอะไรเลยโดยไม่มีข้อโต้แย้ง ตรวจสอบให้แน่ใจเสมอว่าชื่อสคริปต์ของคุณไม่ขัดแย้งกับคำสั่งมิฉะนั้นคุณอาจพบว่าตัวเองกำลังทำสิ่งที่คุณไม่ต้องการทำ!
แนวทางการเขียนสคริปต์
อย่างที่ฉันได้กล่าวไปแล้วไฟล์สคริปต์ทุกไฟล์เป็นข้อความธรรมดา แต่นั่นไม่ได้หมายความว่าคุณสามารถเขียนสิ่งที่คุณต้องการได้ทุกอย่างโดยเจตนา เมื่อมีการพยายามเรียกใช้ไฟล์ข้อความเชลล์จะแยกวิเคราะห์ไฟล์เพื่อหาเบาะแสว่าเป็นสคริปต์หรือไม่และวิธีจัดการทุกอย่างอย่างถูกต้อง ด้วยเหตุนี้จึงมีแนวทางบางประการที่คุณต้องรู้.
- ทุกสคริปต์ควรเป็นแบบ“ #! / bin / bash”
- ทุกบรรทัดใหม่เป็นคำสั่งใหม่
- บรรทัดความคิดเห็นเริ่มต้นด้วย #
- คำสั่งถูกล้อมรอบด้วย ()
แฮช - แบงแฮ็ค
เมื่อเชลล์วิเคราะห์ไฟล์ข้อความวิธีที่ตรงที่สุดในการระบุไฟล์เป็นสคริปต์คือการสร้างบรรทัดแรกของคุณ:
#! / bin / ทุบตี
หากคุณใช้เปลือกอื่นแทนเส้นทางของมันที่นี่ บรรทัดความคิดเห็นเริ่มต้นด้วยแฮช (#) แต่เพิ่ม bang (!) และเส้นทางของเชลล์หลังจากที่แฮ็กนั้นจะผ่านกฎความคิดเห็นนี้และจะบังคับให้สคริปต์ทำงานด้วยเชลล์ที่บรรทัดนี้ชี้ไปที่.
บรรทัดใหม่ = คำสั่งใหม่
ทุกบรรทัดใหม่ควรพิจารณาคำสั่งใหม่หรือส่วนประกอบของระบบที่มีขนาดใหญ่กว่า ตัวอย่างเช่นถ้า / แล้ว / else จะรับช่วงหลายบรรทัด แต่แต่ละองค์ประกอบของระบบนั้นอยู่ในบรรทัดใหม่ อย่าปล่อยให้คำสั่งตกไปในบรรทัดถัดไปเนื่องจากอาจทำให้คำสั่งก่อนหน้าถูกตัดทอนและทำให้คุณมีข้อผิดพลาดในบรรทัดถัดไป หากเครื่องมือแก้ไขข้อความของคุณกำลังทำเช่นนั้นคุณควรปิดการตัดข้อความให้ปลอดภัย คุณสามารถปิดการตัดข้อความด้วยนาโนบิตกด ALT + L.
ความคิดเห็นมักจะมี #s
หากคุณเริ่มต้นบรรทัดด้วย # บรรทัดนั้นจะถูกละเว้น สิ่งนี้จะเปลี่ยนเป็นบรรทัดความคิดเห็นซึ่งคุณสามารถเตือนตัวเองว่าผลลัพธ์ของคำสั่งก่อนหน้านั้นคืออะไรหรือคำสั่งถัดไปจะทำอะไร อีกครั้งปิดการตัดข้อความหรือแยกความคิดเห็นของคุณออกเป็นหลายบรรทัดซึ่งทั้งหมดเริ่มต้นด้วยแฮช การใช้ความคิดเห็นจำนวนมากเป็นการฝึกฝนที่ดีเพื่อให้คุณและบุคคลอื่นปรับเปลี่ยนสคริปต์ของคุณได้ง่ายขึ้น ข้อยกเว้นเพียงอย่างเดียวคือการแฮ็กข้อมูลแฮช - แบงข้างต้นดังนั้นอย่าติดตาม #s ด้วย! s ;-)
คำสั่งถูกล้อมรอบด้วยวงเล็บ
ในวันที่เก่ากว่าการแทนที่คำสั่งทำได้โดยใช้เครื่องหมายเลือกเดียว ('แบ่งปันปุ่ม ~) เรายังไม่ได้สัมผัสกับสิ่งนี้ แต่ในขณะที่คนส่วนใหญ่ออกไปสำรวจหลังจากเรียนรู้พื้นฐานอาจเป็นความคิดที่ดีที่จะพูดถึงว่าคุณควรใช้วงเล็บแทน นี่คือสาเหตุหลักเนื่องจากเมื่อคุณซ้อน - วางคำสั่งภายในคำสั่งอื่น - วงเล็บจะทำงานได้ดีขึ้น.
สคริปต์แรกของคุณ
เริ่มจากสคริปต์ง่าย ๆ ที่ช่วยให้คุณสามารถคัดลอกไฟล์และเพิ่มวันที่ต่อท้ายชื่อไฟล์ได้ ลองเรียกมันว่า "datecp" อันดับแรกให้ตรวจสอบเพื่อดูว่าชื่อนั้นขัดแย้งกับบางอย่างหรือไม่:
คุณสามารถเห็นได้ว่าไม่มีเอาต์พุตของคำสั่งใดดังนั้นเราจึงพร้อมที่จะใช้ชื่อนี้.
มาสร้างไฟล์เปล่าในโฟลเดอร์ ~ / bin:
แตะ ~ / bin / datecp
และขอเปลี่ยนการอนุญาตทันทีก่อนที่เราจะลืม:
เริ่มสร้างสคริปต์ของเรากันเถอะ เปิดไฟล์นั้นในโปรแกรมแก้ไขข้อความที่คุณเลือก อย่างที่ฉันพูดฉันชอบความเรียบง่ายของนาโน.
นาโน ~ / bin / datecp
และให้เราไปข้างหน้าและใส่ในบรรทัดแรกข้อกำหนดเบื้องต้นและความคิดเห็นเกี่ยวกับสิ่งที่สคริปต์นี้ทำ.
ต่อไปเราจะประกาศตัวแปร หากคุณเคยใช้พีชคณิตคุณอาจรู้ว่านั่นคืออะไร ตัวแปรช่วยให้เราสามารถเก็บข้อมูลและทำสิ่งต่าง ๆ ได้ ตัวแปรสามารถ“ ขยาย” เมื่ออ้างอิงที่อื่น นั่นคือแทนที่จะแสดงชื่อพวกเขาจะแสดงเนื้อหาที่เก็บไว้ คุณสามารถบอกได้ในภายหลังว่าตัวแปรเดียวกันนี้เพื่อเก็บข้อมูลที่แตกต่างกันและคำสั่งใด ๆ ที่เกิดขึ้นหลังจากนั้นจะใช้ข้อมูลใหม่ มันเป็นตัวยึดที่แฟนซีมาก ๆ.
เราจะใส่อะไรลงในตัวแปร? มาจัดเก็บวันที่และเวลากันเถอะ! ในการทำเช่นนี้เราจะโทรตามคำสั่งวันที่.
ดูภาพหน้าจอด้านล่างเพื่อดูวิธีสร้างผลลัพธ์ของคำสั่ง date:
คุณสามารถเห็นได้ว่าการเพิ่มตัวแปรต่าง ๆ ที่ขึ้นต้นด้วย% คุณสามารถเปลี่ยนผลลัพธ์ของคำสั่งเป็นสิ่งที่คุณต้องการ สำหรับข้อมูลเพิ่มเติมคุณสามารถดูหน้าคู่มือสำหรับคำสั่งวันที่.
ลองใช้การวนซ้ำครั้งสุดท้ายของคำสั่ง date“ date +% m_% d_% y-% H. % M. % S” และใช้มันในสคริปต์ของเรา.
หากเราต้องบันทึกสคริปต์นี้ในตอนนี้เราสามารถเรียกใช้และมันจะให้ผลลัพธ์ของคำสั่ง date ตามที่เราต้องการ:
แต่ลองทำสิ่งที่แตกต่างกัน ให้ชื่อตัวแปรเช่น date_formatted กับคำสั่งนี้ ไวยากรณ์ที่เหมาะสมสำหรับสิ่งนี้มีดังนี้:
ตัวแปร = $ (อาร์กิวเมนต์คำสั่ง -options)
และสำหรับเราเราจะสร้างมันขึ้นมาเช่นนี้:
date_formatted = $ (วันที่ +% m_% d_% y-% H. % M. % S S)
นี่คือสิ่งที่เราเรียกการทดแทนคำสั่ง เรากำลังบอกกับ bash ว่าเมื่อใดก็ตามที่ตัวแปร“ date_formatted” ปรากฏขึ้นเพื่อเรียกใช้คำสั่งภายในวงเล็บ จากนั้นอะไรก็ตามที่ออกคำสั่งให้ควรจะแสดงแทนชื่อของตัวแปร“ date_formatted”.
นี่คือตัวอย่างสคริปต์และผลลัพธ์:
โปรดทราบว่ามีช่องว่างสองช่องในเอาต์พุต พื้นที่ภายในเครื่องหมายคำพูดของคำสั่ง echo และพื้นที่ด้านหน้าของตัวแปรนั้นจะแสดงขึ้น อย่าใช้ช่องว่างหากคุณไม่ต้องการให้ปรากฏ นอกจากนี้โปรดทราบว่าหากไม่มีบรรทัด "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 มันจะรันสคริปต์นี้และอนุญาตให้ฉันคัดลอกไฟล์ใด ๆ ไปยังตำแหน่งใหม่และเพิ่มวันที่และเวลาโดยอัตโนมัติเพื่อสิ้นสุดชื่อไฟล์ มีประโยชน์สำหรับการเก็บถาวรเนื้อหา!
การเขียนสคริปต์เชลล์เป็นหัวใจสำคัญของการทำให้ระบบปฏิบัติการของคุณทำงานเพื่อคุณ คุณไม่จำเป็นต้องเรียนรู้ภาษาการเขียนโปรแกรมใหม่เพื่อให้มันเกิดขึ้น ลองใช้สคริปต์กับคำสั่งพื้นฐานที่บ้านแล้วเริ่มคิดว่าคุณสามารถใช้สิ่งนี้เพื่ออะไรได้บ้าง.
คุณสคริปต์? มีคำแนะนำสำหรับมือใหม่ไหม? แบ่งปันความคิดของคุณในความคิดเห็น! มีอะไรอีกมากมายในซีรี่ส์นี้!