ใน Linux กระบวนการอัตโนมัติอาศัยการเขียนสคริปต์เชลล์เป็นอย่างมาก สิ่งนี้เกี่ยวข้องกับการสร้างไฟล์ที่มีชุดคำสั่งที่สามารถดำเนินการร่วมกันได้
ในบทความนี้ เราจะเริ่มต้นด้วยพื้นฐานของการเขียนสคริปต์ทุบตีซึ่งรวมถึงตัวแปร คำสั่ง อินพุต/เอาท์พุต และการดีบัก นอกจากนี้เรายังจะได้เห็นตัวอย่างของแต่ละเรื่องในระหว่างทาง
มาเริ่มกันเลย 🚀
สารบัญ
- ข้อกำหนดเบื้องต้น
- บทนำ
- คำจำกัดความของสคริปต์ Bash
- ข้อดีของการเขียนสคริปต์ Bash
- ภาพรวมของ Bash เชลล์และอินเทอร์เฟซบรรทัดคำสั่ง
- วิธีเริ่มต้นใช้งาน Bash Scripting
- วิธีเรียกใช้คำสั่ง Bash จาก Command Line
- วิธีการสร้างและดำเนินการสคริปต์ Bash
-
พื้นฐานการเขียนสคริปต์ Bash
-
ความคิดเห็นในสคริปต์ทุบตี
- ตัวแปรและประเภทข้อมูลใน Bash
- อินพุตและเอาต์พุตในสคริปต์ Bash
- คำสั่ง Bash พื้นฐาน (เสียงก้อง อ่าน ฯลฯ)
-
คำสั่งแบบมีเงื่อนไข (ถ้า/อื่น)
-
การวนซ้ำและการแตกแขนงใน Bash
- ในขณะที่วนซ้ำ
- สำหรับการวนซ้ำ
- คำชี้แจงกรณี
- วิธีกำหนดเวลาสคริปต์โดยใช้ cron
- วิธีการดีบักและแก้ไขปัญหาสคริปต์ Bash
- บทสรุป
- แหล่งข้อมูลสำหรับการเรียนรู้เพิ่มเติมเกี่ยวกับสคริปต์ Bash
ข้อกำหนดเบื้องต้น
หากต้องการปฏิบัติตามบทช่วยสอนนี้ คุณควรมีสิทธิ์เข้าถึงต่อไปนี้:
- Linux เวอร์ชันที่ทำงานอยู่พร้อมการเข้าถึงบรรทัดคำสั่ง
หากคุณไม่ได้ติดตั้ง Linux หรือคุณเพิ่งเริ่มต้น คุณสามารถเข้าถึงบรรทัดคำสั่ง Linux ได้อย่างง่ายดายผ่าน Replit Replit เป็น IDE บนเบราว์เซอร์ที่คุณสามารถเข้าถึง bash shell ได้ภายในไม่กี่นาที
คุณยังสามารถติดตั้ง Linux บนระบบ Windows ของคุณโดยใช้ WSL (ระบบย่อย Windows สำหรับ Linux) นี่คือบทช่วยสอนสำหรับสิ่งนั้น
บทนำ
คำจำกัดความของสคริปต์ทุบตี
สคริปต์ทุบตีเป็นไฟล์ที่มีลำดับของคำสั่งที่ดำเนินการโดยโปรแกรมทุบตีทีละบรรทัด ช่วยให้คุณสามารถดำเนินการต่างๆ ได้ เช่น การนำทางไปยังไดเร็กทอรีเฉพาะ สร้างโฟลเดอร์ และเรียกใช้กระบวนการโดยใช้บรรทัดคำสั่ง ป>
ด้วยการบันทึกคำสั่งเหล่านี้ในสคริปต์ คุณสามารถทำซ้ำลำดับขั้นตอนเดียวกันได้หลายครั้ง และดำเนินการได้โดยการรันสคริปต์
ข้อดีของการเขียนสคริปต์ Bash
Bash Scripting เป็นเครื่องมือที่ทรงพลังและอเนกประสงค์สำหรับงานการดูแลระบบอัตโนมัติ จัดการทรัพยากรระบบ และดำเนินงานประจำอื่นๆ ในระบบ Unix/Linux ข้อดีบางประการของเชลล์สคริปต์คือ:
- ระบบอัตโนมัติ :เชลล์สคริปต์ช่วยให้คุณทำงานและกระบวนการที่ซ้ำกันโดยอัตโนมัติ ประหยัดเวลาและลดความเสี่ยงของข้อผิดพลาดที่อาจเกิดขึ้นจากการดำเนินการด้วยตนเอง
- การพกพา :เชลล์สคริปต์สามารถทำงานได้บนแพลตฟอร์มและระบบปฏิบัติการต่างๆ รวมถึง Unix, Linux, macOS และแม้แต่ Windows ผ่านการใช้โปรแกรมจำลองหรือเครื่องเสมือน
- ความยืดหยุ่น :เชลล์สคริปต์สามารถปรับแต่งได้สูงและสามารถแก้ไขได้อย่างง่ายดายเพื่อให้เหมาะกับความต้องการเฉพาะ นอกจากนี้ยังสามารถใช้ร่วมกับภาษาการเขียนโปรแกรมหรือยูทิลิตี้อื่นๆ เพื่อสร้างสคริปต์ที่มีประสิทธิภาพมากขึ้นได้
- การเข้าถึง :เชลล์สคริปต์เขียนได้ง่ายและไม่ต้องใช้เครื่องมือหรือซอฟต์แวร์พิเศษใดๆ สามารถแก้ไขได้โดยใช้โปรแกรมแก้ไขข้อความ และระบบปฏิบัติการส่วนใหญ่มีเชลล์ล่ามในตัว
- บูรณาการ :เชลล์สคริปต์สามารถรวมเข้ากับเครื่องมือและแอปพลิเคชันอื่นๆ ได้ เช่น ฐานข้อมูล เว็บเซิร์ฟเวอร์ และบริการคลาวด์ ช่วยให้ทำงานอัตโนมัติและการจัดการระบบที่ซับซ้อนมากขึ้นได้
- การแก้ไขจุดบกพร่อง :เชลล์สคริปต์นั้นแก้ไขได้ง่าย และเชลล์ส่วนใหญ่มีเครื่องมือแก้ไขข้อบกพร่องและรายงานข้อผิดพลาดในตัวที่สามารถช่วยระบุและแก้ไขปัญหาได้อย่างรวดเร็ว
ภาพรวมของ Bash เชลล์และอินเทอร์เฟซบรรทัดคำสั่ง
คำว่า "shell" และ "bash" ใช้แทนกันได้ แต่มีความแตกต่างเล็กน้อยระหว่างทั้งสอง ป>
คำว่า "เชลล์" หมายถึงโปรแกรมที่มีอินเทอร์เฟซบรรทัดคำสั่งสำหรับการโต้ตอบกับระบบปฏิบัติการ Bash (Bourne-Again SHell) เป็นหนึ่งในเชลล์ Unix/Linux ที่ใช้บ่อยที่สุด และเป็นเชลล์เริ่มต้นใน Linux หลายๆ รุ่น
อินเตอร์เฟสเชลล์หรือบรรทัดคำสั่งมีลักษณะดังนี้:
เชลล์ยอมรับคำสั่งจากผู้ใช้และแสดงผลลัพธ์ ป>
ในผลลัพธ์ข้างต้น 03 คือพรอมต์ของเชลล์ เมื่อเชลล์ถูกใช้แบบโต้ตอบ มันจะแสดง 12 เมื่อกำลังรอคำสั่งจากผู้ใช้ ป>
หากเชลล์ทำงานในฐานะรูท (ผู้ใช้ที่มีสิทธิ์ผู้ดูแลระบบ) พรอมต์จะเปลี่ยนเป็น 20 . พรอมต์เชลล์ superuser มีลักษณะดังนี้:
[root@host ~]#
แม้ว่า Bash จะเป็นเชลล์ประเภทหนึ่ง แต่ก็มีเชลล์อื่นๆ ให้เลือกเช่นกัน เช่น Korn เชลล์ (ksh), C เชลล์ (csh) และ Z เชลล์ (zsh) แต่ละเชลล์มีไวยากรณ์และชุดคุณลักษณะของตัวเอง แต่เชลล์ทั้งหมดมีจุดประสงค์ร่วมกันในการจัดหาอินเทอร์เฟซบรรทัดคำสั่งสำหรับการโต้ตอบกับระบบปฏิบัติการ
คุณสามารถกำหนดประเภทเชลล์ของคุณได้โดยใช้ 36 คำสั่ง:
ps
นี่คือผลลัพธ์สำหรับฉัน:
การตรวจสอบประเภทเชลล์ ฉันใช้ bash shell ป>
โดยสรุป แม้ว่า "shell" เป็นคำกว้างๆ ที่อ้างถึงโปรแกรมใดๆ ที่มีอินเทอร์เฟซบรรทัดคำสั่ง แต่ "Bash" นั้นเป็นเชลล์ประเภทเฉพาะที่ใช้กันอย่างแพร่หลายในระบบ Unix/Linux
หมายเหตุ:ในบทช่วยสอนนี้ เราจะใช้เชลล์ "bash"
วิธีเริ่มต้นใช้งาน Bash Scripting
การรันคำสั่ง Bash จากบรรทัดคำสั่ง
ตามที่กล่าวไว้ข้างต้น พรอมต์ของเชลล์จะมีลักษณะดังนี้:
[username@host ~]$
คุณสามารถป้อนคำสั่งใดก็ได้หลัง 47 ลงชื่อและดูเอาต์พุตบนเทอร์มินัล
โดยทั่วไป คำสั่งจะเป็นไปตามไวยากรณ์นี้:
command [OPTIONS] arguments
เรามาหารือเกี่ยวกับคำสั่ง bash พื้นฐานบางประการและดูผลลัพธ์ของคำสั่งเหล่านั้น ฝากติดตามกันด้วยนะครับ :)
58รหัส> :แสดงวันที่ปัจจุบัน
zaira@Zaira:~/shell-tutorial$ date
Tue Mar 14 13:08:57 PKT 2023
67รหัส> :แสดงไดเร็กทอรีการทำงานปัจจุบัน
zaira@Zaira:~/shell-tutorial$ pwd
/home/zaira/shell-tutorial
78รหัส> :แสดงรายการเนื้อหาของไดเร็กทอรีปัจจุบัน
zaira@Zaira:~/shell-tutorial$ ls
check_plaindrome.sh count_odd.sh env log temp
85รหัส> :พิมพ์สตริงข้อความหรือค่าของตัวแปรไปยังเทอร์มินัล
zaira@Zaira:~/shell-tutorial$ echo "Hello bash"
Hello bash
คุณสามารถอ้างอิงถึงคู่มือคำสั่งด้วย 94 ได้ตลอดเวลา คำสั่ง
ตัวอย่างเช่น คู่มือสำหรับ 105 มีลักษณะดังนี้:
คุณสามารถดูตัวเลือกสำหรับคำสั่งโดยละเอียดได้โดยใช้
111 ป>
วิธีการสร้างและดำเนินการสคริปต์ Bash
แบบแผนการตั้งชื่อสคริปต์
โดยการตั้งชื่อแบบแผน สคริปต์ทุบตีจะลงท้ายด้วย 124 . อย่างไรก็ตาม สคริปต์ทุบตีสามารถทำงานได้อย่างสมบูรณ์แบบโดยไม่ต้องใช้ 134 นามสกุล.
การเพิ่มชีบัง
สคริปต์ทุบตีเริ่มต้นด้วย 147 . Shebang คือการรวมกันของ 157 และ 168รหัส> ตามด้วยเส้นทาง bash shell นี่คือบรรทัดแรกของสคริปต์ Shebang บอกให้เชลล์ดำเนินการผ่าน bash shell Shebang เป็นเพียงเส้นทางที่แน่นอนไปยังล่าม bash
ด้านล่างนี้เป็นตัวอย่างของคำสั่ง shebang
#!/bin/bash
คุณสามารถค้นหาเส้นทางเชลล์ bash ของคุณ (ซึ่งอาจแตกต่างจากข้างต้น) โดยใช้คำสั่ง:
which bash
การสร้างสคริปต์ทุบตีแรกของเรา
สคริปต์แรกของเราแจ้งให้ผู้ใช้ป้อนเส้นทาง เนื้อหาจะถูกระบุไว้เป็นการตอบแทน ป>
สร้างไฟล์ชื่อ 176 โดยใช้ 181 คำสั่ง คุณสามารถใช้โปรแกรมแก้ไขใดก็ได้ตามที่คุณต้องการ ป>
vi run_all.sh
เพิ่มคำสั่งต่อไปนี้ในไฟล์ของคุณและบันทึก:
#!/bin/bash
echo "Today is " `date`
echo -e "\nenter the path to directory"
read the_path
echo -e "\n you path has the following files and folders: "
ls $the_path
เรามาดูรายละเอียดสคริปต์ทีละบรรทัดกันดีกว่า ฉันกำลังแสดงสคริปต์เดิมอีกครั้ง แต่คราวนี้มีหมายเลขบรรทัด ป>
1 #!/bin/bash
2 echo "Today is " `date`
3
4 echo -e "\nenter the path to directory"
5 read the_path
6
7 echo -e "\n you path has the following files and folders: "
8 ls $the_path
- บรรทัด #1:Shebang (
194) ชี้ไปที่เส้นทาง bash shell - บรรทัด #2:
203คำสั่งแสดงวันที่และเวลาปัจจุบันบนเทอร์มินัล โปรดทราบว่า210อยู่ใน backticks - บรรทัด #4:เราต้องการให้ผู้ใช้ป้อนเส้นทางที่ถูกต้อง
- บรรทัด #5:
226คำสั่งอ่านอินพุตและเก็บไว้ในตัวแปร237. - บรรทัด #8:
240คำสั่งรับตัวแปรพร้อมเส้นทางที่เก็บไว้และแสดงไฟล์และโฟลเดอร์ปัจจุบัน
กำลังดำเนินการสคริปต์ทุบตี
หากต้องการให้สคริปต์ทำงานได้ ให้กำหนดสิทธิ์ในการดำเนินการให้กับผู้ใช้ของคุณโดยใช้คำสั่งนี้:
chmod u+x run_all.sh
ที่นี่
256รหัส> แก้ไขความเป็นเจ้าของไฟล์สำหรับผู้ใช้ปัจจุบัน :267.279รหัส> เพิ่มสิทธิ์ในการดำเนินการให้กับผู้ใช้ปัจจุบัน ซึ่งหมายความว่าผู้ใช้ที่เป็นเจ้าของสามารถเรียกใช้สคริปต์ได้แล้ว281รหัส> เป็นไฟล์ที่เราต้องการเรียกใช้
คุณสามารถเรียกใช้สคริปต์โดยใช้วิธีการใดก็ได้ที่กล่าวถึง:
296รหัส>308รหัส>316รหัส>
มาดูการทำงานของมันกัน 🚀
พื้นฐานการเขียนสคริปต์ Bash
ความคิดเห็นเริ่มต้นด้วย 323 ในการเขียนสคริปต์ทุบตี ซึ่งหมายความว่าบรรทัดใดๆ ที่ขึ้นต้นด้วย 338 เป็นความคิดเห็นและล่ามจะเพิกเฉย ป>
ความคิดเห็นมีประโยชน์มากในการจัดทำเอกสารโค้ด และถือเป็นแนวปฏิบัติที่ดีที่จะเพิ่มความคิดเห็นเพื่อช่วยให้ผู้อื่นเข้าใจโค้ด ป>
นี่คือตัวอย่างความคิดเห็น:
# This is an example comment
# Both of these lines will be ignored by the interpreter
ตัวแปรและประเภทข้อมูลใน Bash
ตัวแปรช่วยให้คุณจัดเก็บข้อมูลได้ คุณสามารถใช้ตัวแปรเพื่ออ่าน เข้าถึง และจัดการข้อมูลตลอดทั้งสคริปต์ของคุณได้ ป>
ไม่มีประเภทข้อมูลใน Bash ใน Bash ตัวแปรสามารถจัดเก็บค่าตัวเลข อักขระแต่ละตัว หรือสตริงอักขระได้
ใน Bash คุณสามารถใช้และตั้งค่าตัวแปรได้ด้วยวิธีต่อไปนี้:
- กำหนดค่าโดยตรง:
country=Pakistan
- กำหนดค่าตามเอาต์พุตที่ได้รับจากโปรแกรมหรือคำสั่ง โดยใช้การทดแทนคำสั่ง โปรดทราบว่า
343จำเป็นต้องเข้าถึงค่าของตัวแปรที่มีอยู่
same_country=$country
หากต้องการเข้าถึงค่าตัวแปร ให้เพิ่ม 352 ไปที่ชื่อตัวแปร
zaira@Zaira:~$ country=Pakistan
zaira@Zaira:~$ echo $country
Pakistan
zaira@Zaira:~$ new_country=$country
zaira@Zaira:~$ echo $new_country
Pakistan
แบบแผนการตั้งชื่อตัวแปร
ในการเขียนสคริปต์ Bash ต่อไปนี้คือหลักการตั้งชื่อตัวแปร:
- ชื่อตัวแปรควรขึ้นต้นด้วยตัวอักษรหรือขีดล่าง (
368). - ชื่อตัวแปรสามารถประกอบด้วยตัวอักษร ตัวเลข และขีดล่าง (
374). - ชื่อตัวแปรต้องตรงตามตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
- ชื่อตัวแปรไม่ควรมีการเว้นวรรคหรืออักขระพิเศษ
- ใช้ชื่อที่สื่อความหมายซึ่งสะท้อนถึงวัตถุประสงค์ของตัวแปร
- หลีกเลี่ยงการใช้คำหลักที่สงวนไว้ เช่น
388,395รหัส> ,406รหัส> ,411รหัส> และอื่นๆ เป็นชื่อตัวแปร
นี่คือตัวอย่างบางส่วนของชื่อตัวแปรที่ถูกต้องใน Bash:
name
count
_var
myVar
MY_VAR
และนี่คือตัวอย่างบางส่วนของชื่อตัวแปรที่ไม่ถูกต้อง:
2ndvar (variable name starts with a number)
my var (variable name contains a space)
my-var (variable name contains a hyphen)
การปฏิบัติตามหลักการตั้งชื่อเหล่านี้ช่วยให้สคริปต์ Bash สามารถอ่านได้ง่ายขึ้นและดูแลรักษาได้ง่ายขึ้น
อินพุตและเอาต์พุตในสคริปต์ Bash
กำลังรวบรวมข้อมูล
ในส่วนนี้ เราจะพูดถึงวิธีการบางอย่างในการป้อนข้อมูลให้กับสคริปต์ของเรา ป>
- การอ่านอินพุตของผู้ใช้และจัดเก็บไว้ในตัวแปร
เราสามารถอ่านอินพุตของผู้ใช้ได้โดยใช้ 426 คำสั่ง
#!/bin/bash
echo "What's your name?"
read entered_name
echo -e "\nWelcome to bash tutorial" $entered_name
- การอ่านจากไฟล์
รหัสนี้จะอ่านแต่ละบรรทัดจากไฟล์ชื่อ 438 และพิมพ์ไปที่เทอร์มินัล เราจะศึกษา while loop ในบทความนี้ในภายหลัง
while read line
do
echo $line
done < input.txt
- อาร์กิวเมนต์บรรทัดคำสั่ง
ในสคริปต์ทุบตีหรือฟังก์ชัน 447 หมายถึงอาร์กิวเมนต์เริ่มต้นที่ส่งผ่าน 450 หมายถึงอาร์กิวเมนต์ที่สองที่ผ่านไป และอื่นๆ
สคริปต์นี้ใช้ชื่อเป็นอาร์กิวเมนต์บรรทัดคำสั่งและพิมพ์คำทักทายส่วนตัว
echo "Hello, $1!"
เราได้จัดเตรียม 460 แล้ว เป็นข้อโต้แย้งของเราต่อสคริปต์
#!/bin/bash
echo "Hello, $1!"
เอาต์พุต: ป>
กำลังแสดงผล
ที่นี่เราจะหารือถึงวิธีการบางอย่างในการรับเอาต์พุตจากสคริปต์
- การพิมพ์ไปยังเทอร์มินัล:
echo "Hello, World!"
ซึ่งจะพิมพ์ข้อความ "Hello, World!" ไปยังเทอร์มินัล
- การเขียนลงไฟล์:
echo "This is some text." > output.txt
สิ่งนี้จะเขียนข้อความว่า "นี่คือข้อความบางส่วน" ไปยังไฟล์ชื่อ 474 . โปรดทราบว่า 488 โอเปอเรเตอร์จะเขียนทับไฟล์หากมีเนื้อหาอยู่แล้ว ป>
- การต่อท้ายไฟล์:
echo "More text." >> output.txt
ซึ่งจะต่อท้ายข้อความ "ข้อความเพิ่มเติม" ต่อท้ายไฟล์ 493 .
- เอาต์พุตการเปลี่ยนเส้นทาง:
ls > files.txt
ซึ่งจะแสดงรายการไฟล์ในไดเร็กทอรีปัจจุบันและเขียนเอาต์พุตไปยังไฟล์ชื่อ 501 . คุณสามารถเปลี่ยนเส้นทางเอาต์พุตของคำสั่งใดๆ ไปยังไฟล์ได้ด้วยวิธีนี้
คำสั่ง Bash พื้นฐาน (echo อ่าน ฯลฯ)
นี่คือรายการคำสั่ง bash ที่ใช้บ่อยที่สุดบางส่วน:
511รหัส> :เปลี่ยนไดเร็กทอรีเป็นตำแหน่งอื่น523รหัส> :แสดงรายการเนื้อหาของไดเร็กทอรีปัจจุบัน536รหัส> :สร้างไดเร็กทอรีใหม่549รหัส> :สร้างไฟล์ใหม่553รหัส> :ลบไฟล์หรือไดเร็กทอรี561รหัส> :คัดลอกไฟล์หรือไดเร็กทอรี573รหัส> :ย้ายหรือเปลี่ยนชื่อไฟล์หรือไดเร็กทอรี587รหัส> :พิมพ์ข้อความไปยังเทอร์มินัล596รหัส> :เชื่อมต่อและพิมพ์เนื้อหาของไฟล์602รหัส> :ค้นหารูปแบบในไฟล์612รหัส> :เปลี่ยนการอนุญาตของไฟล์หรือไดเร็กทอรี628รหัส> :เรียกใช้คำสั่งด้วยสิทธิ์ผู้ดูแลระบบ632รหัส> :แสดงจำนวนพื้นที่ว่างในดิสก์643รหัส> :แสดงรายการคำสั่งที่ดำเนินการก่อนหน้านี้655รหัส> :แสดงข้อมูลเกี่ยวกับกระบวนการที่ทำงานอยู่
คำสั่งแบบมีเงื่อนไข (ถ้า/อื่น)
นิพจน์ที่สร้างผลลัพธ์บูลีน จริงหรือเท็จ เรียกว่าเงื่อนไข มีหลายวิธีในการประเมินเงื่อนไข รวมถึง 663 , 679รหัส> , 681รหัส> และเงื่อนไขแบบซ้อน
ไวยากรณ์ :
if [[ condition ]];
then
statement
elif [[ condition ]]; then
statement
else
do this by default
fi
เราสามารถใช้ตัวดำเนินการเชิงตรรกะ เช่น AND 691 และหรือ 700 เพื่อทำการเปรียบเทียบที่มีนัยสำคัญมากขึ้น ป>
if [ $a -gt 60 -a $b -lt 100 ]
เรามาดูตัวอย่างสคริปต์ Bash ที่ใช้ 711 , 726รหัส> และ 737 คำสั่งเพื่อพิจารณาว่าตัวเลขที่ผู้ใช้ป้อนเป็นค่าบวก ลบ หรือศูนย์:
#!/bin/bash
echo "Please enter a number: "
read num
if [ $num -gt 0 ]; then
echo "$num is positive"
elif [ $num -lt 0 ]; then
echo "$num is negative"
else
echo "$num is zero"
fi
สคริปต์จะแจ้งให้ผู้ใช้ป้อนตัวเลขก่อน จากนั้นจะใช้ 749 คำสั่งเพื่อตรวจสอบว่าตัวเลขมากกว่า 0 หรือไม่ หากเป็นเช่นนั้น สคริปต์จะส่งออกว่าตัวเลขนั้นเป็นค่าบวก หากตัวเลขไม่เกิน 0 สคริปต์จะย้ายไปยังคำสั่งถัดไปซึ่งก็คือ 754 คำสั่ง ที่นี่ สคริปต์จะตรวจสอบว่าตัวเลขน้อยกว่า 0 หรือไม่ หากเป็นเช่นนั้น สคริปต์จะแสดงผลว่าตัวเลขนั้นเป็นลบ สุดท้ายนี้ หากตัวเลขไม่มากกว่า 0 หรือน้อยกว่า 0 สคริปต์จะใช้ 767 คำสั่งเพื่อส่งออกว่าตัวเลขเป็นศูนย์
เห็นมันใช้งานจริง 🚀
การวนซ้ำและการแตกแขนงใน Bash
ขณะวนซ้ำ
ในขณะที่ลูปตรวจสอบเงื่อนไขและวนซ้ำจนกว่าเงื่อนไขจะยังคงอยู่ 777 . เราจำเป็นต้องจัดเตรียมคำสั่ง counter ที่เพิ่มตัวนับเพื่อควบคุมการดำเนินการวนซ้ำ
ในตัวอย่างด้านล่าง 780 คือคำสั่ง counter ที่เพิ่มค่า 791 . การวนซ้ำจะทำงาน 10 ครั้งพอดี
#!/bin/bash
i=1
while [[ $i -le 10 ]] ; do
echo "$i"
(( i += 1 ))
done
สำหรับการวนซ้ำ
801รหัส> วนซ้ำ เช่นเดียวกับ 819 loop ช่วยให้คุณสามารถดำเนินการคำสั่งตามจำนวนครั้งที่กำหนด แต่ละลูปแตกต่างกันในด้านไวยากรณ์และการใช้งาน
ในตัวอย่างด้านล่าง การวนซ้ำจะวนซ้ำ 5 ครั้ง
#!/bin/bash
for i in {1..5}
do
echo $i
done
คำสั่งกรณี
ใน Bash คำสั่ง case ใช้เพื่อเปรียบเทียบค่าที่กำหนดกับรายการรูปแบบและดำเนินการบล็อกโค้ดตามรูปแบบแรกที่ตรงกัน ไวยากรณ์สำหรับคำสั่ง case ใน Bash เป็นดังนี้:
case expression in
pattern1)
# code to execute if expression matches pattern1
;;
pattern2)
# code to execute if expression matches pattern2
;;
pattern3)
# code to execute if expression matches pattern3
;;
*)
# code to execute if none of the above patterns match expression
;;
esac
ในที่นี้ "นิพจน์" คือค่าที่เราต้องการเปรียบเทียบ และ "รูปแบบ 1" "รูปแบบ 2" "รูปแบบ 3" และอื่นๆ คือรูปแบบที่เราต้องการเปรียบเทียบด้วย ป>
อัฒภาคคู่ ";;" แยกแต่ละบล็อกของโค้ดเพื่อดำเนินการสำหรับแต่ละรูปแบบ เครื่องหมายดอกจัน "*" แสดงถึงตัวพิมพ์เริ่มต้น ซึ่งจะดำเนินการหากไม่มีรูปแบบที่ระบุตรงกับนิพจน์
มาดูตัวอย่างกัน
fruit="apple"
case $fruit in
"apple")
echo "This is a red fruit."
;;
"banana")
echo "This is a yellow fruit."
;;
"orange")
echo "This is an orange fruit."
;;
*)
echo "Unknown fruit."
;;
esac
ในตัวอย่างนี้ เนื่องจากค่าของ "fruit" คือ "apple" รูปแบบแรกจึงตรงกัน และบล็อกของโค้ดที่สะท้อนว่า "นี่คือผลไม้สีแดง" ถูกดำเนินการ หากค่าของ "ผลไม้" แทนที่จะเป็น "กล้วย" รูปแบบที่สองจะตรงกันและบล็อกของรหัสที่สะท้อนว่า "นี่คือผลไม้สีเหลือง" จะดำเนินการและอื่นๆ หากค่าของ "fruit" ไม่ตรงกับรูปแบบใดๆ ที่ระบุ ระบบจะดำเนินการตามตัวพิมพ์เริ่มต้น ซึ่งจะแสดงเป็น "ผลไม้ที่ไม่รู้จัก"
วิธีกำหนดเวลาสคริปต์โดยใช้ cron
Cron เป็นยูทิลิตี้อันทรงพลังสำหรับการจัดตารางงานซึ่งมีอยู่ในระบบปฏิบัติการแบบ Unix ด้วยการกำหนดค่า cron คุณสามารถตั้งค่างานอัตโนมัติให้ทำงานเป็นรายวัน รายสัปดาห์ รายเดือน หรือตามเวลาที่กำหนดได้ ความสามารถอัตโนมัติที่ได้รับจาก cron มีบทบาทสำคัญในการดูแลระบบ Linux
ด้านล่างนี้เป็นไวยากรณ์เพื่อกำหนดเวลา crons:
# Cron job example
* * * * * sh /path/to/script.sh
ที่นี่ 824 s แสดงถึงนาที ชั่วโมง วัน เดือน วันทำงาน ตามลำดับ
ด้านล่างนี้คือตัวอย่างบางส่วนของการกำหนดเวลางาน cron
837รหัส> เรียกใช้สคริปต์ตอนเที่ยงคืนทุกวัน846 853รหัส> เรียกใช้สคริปต์ทุกๆ 5 นาที869 870รหัส> เรียกใช้สคริปต์เวลา 6.00 น. ตั้งแต่วันจันทร์ถึงวันศุกร์884 899รหัส> เรียกใช้สคริปต์ใน 7 วันแรกของทุกเดือน900 913รหัส> เรียกใช้สคริปต์ในวันแรกของทุกเดือนเวลาเที่ยง922 การใช้ crontab
939รหัส> ยูทิลิตี้นี้ใช้เพื่อเพิ่มและแก้ไขงาน cron
941รหัส> แสดงรายการสคริปต์ที่กำหนดเวลาไว้แล้วสำหรับผู้ใช้รายใดรายหนึ่ง
คุณสามารถเพิ่มและแก้ไข cron ได้ผ่านทาง 956 .
คุณสามารถอ่านเพิ่มเติมเกี่ยวกับงานข้าวโพดได้ในบทความอื่นของฉันที่นี่ ป>
วิธีการดีบักและแก้ไขปัญหาสคริปต์ Bash
การดีบักและการแก้ไขปัญหาเป็นทักษะที่จำเป็นสำหรับ Bash scripter แม้ว่าสคริปต์ Bash จะมีประสิทธิภาพอย่างเหลือเชื่อ แต่ก็อาจมีแนวโน้มที่จะเกิดข้อผิดพลาดและพฤติกรรมที่ไม่คาดคิดได้เช่นกัน ในส่วนนี้ เราจะพูดถึงเคล็ดลับและเทคนิคบางประการในการดีบักและแก้ไขปัญหาสคริปต์ Bash
ตั้งค่า 966 ตัวเลือก
หนึ่งในเทคนิคที่มีประโยชน์ที่สุดสำหรับการดีบักสคริปต์ Bash คือการตั้งค่า 971 ตัวเลือกที่จุดเริ่มต้นของสคริปต์ ตัวเลือกนี้เปิดใช้งานโหมดการแก้ไขข้อบกพร่อง ซึ่งทำให้ Bash พิมพ์แต่ละคำสั่งที่เรียกใช้งานไปยังเทอร์มินัล โดยนำหน้าด้วย 983 ลงชื่อ สิ่งนี้มีประโยชน์อย่างเหลือเชื่อในการระบุตำแหน่งที่เกิดข้อผิดพลาดในสคริปต์ของคุณ
#!/bin/bash
set -x
# Your script goes here
ตรวจสอบรหัสทางออก
เมื่อ Bash พบข้อผิดพลาด มันจะตั้งค่ารหัสทางออกที่ระบุถึงลักษณะของข้อผิดพลาด คุณสามารถตรวจสอบรหัสออกของคำสั่งล่าสุดได้โดยใช้ 995 ตัวแปร ค่า 1001 บ่งบอกถึงความสำเร็จ ในขณะที่ค่าอื่นๆ บ่งชี้ว่ามีข้อผิดพลาด
#!/bin/bash
# Your script goes here
if [ $? -ne 0 ]; then
echo "Error occurred."
fi
ใช้ 1015 คำสั่ง
เทคนิคที่มีประโยชน์อีกประการหนึ่งในการดีบักสคริปต์ Bash คือการแทรก 1021 คำสั่งตลอดรหัสของคุณ วิธีนี้ช่วยให้คุณระบุได้ว่าข้อผิดพลาดเกิดขึ้นที่ใดและค่าใดบ้างที่ถูกส่งไปยังตัวแปร
#!/bin/bash
# Your script goes here
echo "Value of variable x is: $x"
# More code goes here
ใช้ 1035 ตัวเลือก
หากคุณต้องการให้สคริปต์ออกทันทีเมื่อคำสั่งใดๆ ในสคริปต์ล้มเหลว คุณสามารถใช้ 1049 ตัวเลือก ตัวเลือกนี้จะทำให้ Bash ออกโดยมีข้อผิดพลาดหากคำสั่งใดๆ ในสคริปต์ล้มเหลว ทำให้ง่ายต่อการระบุและแก้ไขข้อผิดพลาดในสคริปต์ของคุณ
#!/bin/bash
set -e
# Your script goes here
การแก้ไขปัญหา crons โดยการตรวจสอบบันทึก
เราสามารถแก้ไขปัญหา crons ได้โดยใช้ไฟล์บันทึก บันทึกจะถูกเก็บรักษาสำหรับงานที่กำหนดเวลาไว้ทั้งหมด คุณสามารถตรวจสอบและยืนยันในบันทึกว่างานเฉพาะทำงานตามที่ตั้งใจไว้หรือไม่
สำหรับ Ubuntu/Debian คุณจะพบ 1054 บันทึกที่:
/var/log/syslog
ตำแหน่งจะแตกต่างกันไปสำหรับการแจกแจงอื่น ๆ
ไฟล์บันทึกงาน cron อาจมีลักษณะดังนี้:
2022-03-11 00:00:01 Task started
2022-03-11 00:00:02 Running script /path/to/script.sh
2022-03-11 00:00:03 Script completed successfully
2022-03-11 00:05:01 Task started
2022-03-11 00:05:02 Running script /path/to/script.sh
2022-03-11 00:05:03 Error: unable to connect to database
2022-03-11 00:05:03 Script exited with error code 1
2022-03-11 00:10:01 Task started
2022-03-11 00:10:02 Running script /path/to/script.sh
2022-03-11 00:10:03 Script completed successfully
บทสรุป
ในบทความนี้ เราเริ่มต้นด้วยวิธีเข้าถึงเทอร์มินัล จากนั้นรันคำสั่ง bash พื้นฐานบางคำสั่ง เรายังศึกษาด้วยว่า bash shell คืออะไร เราดูสั้นๆ เกี่ยวกับการแตกสาขาโค้ดโดยใช้ลูปและเงื่อนไข สุดท้ายนี้ เราได้พูดคุยถึงเรื่องการทำให้สคริปต์เป็นอัตโนมัติโดยใช้ cron ตามด้วยเทคนิคการแก้ปัญหาบางอย่าง
แหล่งข้อมูลสำหรับการเรียนรู้เพิ่มเติมเกี่ยวกับสคริปต์ Bash
หากคุณต้องการเจาะลึกเข้าไปในโลกแห่งการเขียนสคริปต์ทุบตี ฉันขอแนะนำให้คุณดูหลักสูตร 6 ชั่วโมงบน Linux ที่ freeCodeCamp
ป>
คุณชอบอะไรที่คุณได้เรียนรู้จากบทช่วยสอนนี้ คุณสามารถเชื่อมต่อกับฉันได้บนแพลตฟอร์มเหล่านี้ 📧�
เจอกันใหม่ในบทช่วยสอนถัดไป ขอให้มีความสุขกับการเขียนโค้ด 😁
เครดิตรูปภาพแบนเนอร์:รูปภาพโดย Freepik
เรียนรู้การเขียนโค้ดฟรี หลักสูตรโอเพ่นซอร์สของ freeCodeCamp ช่วยให้ผู้คนมากกว่า 40,000 คนได้งานในตำแหน่งนักพัฒนา เริ่มต้น
-
-
-
-