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

5 ตัวอย่างคำชี้แจงกรณีทุบตี

5 ตัวอย่างคำชี้แจงกรณีทุบตีคำสั่งเคสเชลล์ของ Bash คล้ายกับคำสั่ง switch ใน C สามารถใช้ทดสอบค่าอย่างง่ายเช่นจำนวนเต็มและ ตัวอักษร

คำสั่ง Case ไม่ใช่การวนซ้ำ จะไม่รันบล็อกของโค้ดเป็นจำนวน n ครั้ง ให้ bash shell ตรวจสอบเงื่อนไขและควบคุมโฟลว์ของโปรแกรมแทน

ในบทความนี้ ให้เราตรวจสอบคำสั่ง bash case ด้วยตัวอย่างที่ใช้งานได้จริง 5 ตัวอย่าง

โครงสร้างเคสใน bash shell ช่วยให้เราสามารถทดสอบสตริงกับรูปแบบที่สามารถมีอักขระไวด์การ์ดได้ คำสั่งกรณีทุบตีเป็นรูปแบบที่ง่ายที่สุดของคำสั่ง bash if-then-else

ไวยากรณ์ของคำสั่งกรณีทุบตี

case expression in
 pattern1 )
 statements ;;
 pattern2 )
 statements ;;
 ...
esac

ต่อไปนี้เป็นประเด็นสำคัญของคำสั่งกรณีทุบตี:

  • คำสั่ง Case จะขยายนิพจน์ก่อน และพยายามจับคู่กับแต่ละรูปแบบ
  • เมื่อพบข้อความสั่งที่เกี่ยวข้องทั้งหมดจนกว่าเครื่องหมายอัฒภาคคู่ (;;) จะถูกดำเนินการ
  • หลังจากการแข่งขันครั้งแรก เคสจะสิ้นสุดลงด้วยสถานะการออกของคำสั่งสุดท้ายที่ดำเนินการ
  • หากไม่มีรายการที่ตรงกัน สถานะการออกของเคสจะเป็นศูนย์

Bash Case Example 1. การส่งสัญญาณไปยังกระบวนการ

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

สคริปต์นี้มีไว้เพื่อสาธิตการใช้งานคำสั่งกรณีศึกษา

$ cat signal.sh
#!/bin/bash

if [ $# -lt 2 ]
then
 echo "Usage : $0 Signalnumber PID"
 exit
fi

case "$1" in

1) echo "Sending SIGHUP signal"
 kill -SIGHUP $2
 ;;
2) echo "Sending SIGINT signal"
 kill -SIGINT $2
 ;;
3) echo "Sending SIGQUIT signal"
 kill -SIGQUIT $2
 ;;
9) echo "Sending SIGKILL signal"
 kill -SIGKILL $2
 ;;
*) echo "Signal number $1 is not processed"
 ;;
esac

ในตัวอย่างข้างต้น:

  • $1 และ $2 เป็นหมายเลขสัญญาณและรหัสกระบวนการตามลำดับ
  • การใช้คำสั่ง kill จะส่งสัญญาณที่เกี่ยวข้องไปยัง id กระบวนการที่กำหนด
  • มันรันคำสั่ง sleep เป็นเวลาหลายวินาที
  • การเปรียบเทียบสุดท้ายที่ไม่บังคับ *) เป็นกรณีเริ่มต้นและตรงกับทุกอย่าง

การใช้เชลล์สคริปต์ด้านบน:ค้นหา id กระบวนการของคำสั่ง sleep และส่งสัญญาณ kill ไปยัง id กระบวนการนั้นเพื่อฆ่ากระบวนการ

$ sleep 1000

$ ps -a | grep sleep
23277 pts/2 00:00:00 sleep

$ ./signal.sh 9 23277
Sending SIGKILL signal

$ sleep 1000
Killed

โปรดดูบทความการฆ่าก่อนหน้าของเรา – 4 วิธีในการฆ่ากระบวนการ

ตัวอย่างกรณีทุบตี. 2. การจับคู่รูปแบบในไฟล์

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

$ cat fileop.sh
#!/bin/bash

# Check 3 arguments are given #
if [ $# -lt 3 ]
then
 echo "Usage : $0 option pattern filename"
 exit
fi

# Check the given file is exist #
if [ ! -f $3 ]
then
 echo "Filename given \"$3\" doesn't exist"
 exit
fi

case "$1" in

# Count number of lines matches
-i) echo "Number of lines matches with the pattern $2 :"
 grep -c -i $2 $3
 ;;
# Count number of words matches
-c) echo "Number of words matches with the pattern $2 :"
 grep -o -i $2 $3 | wc -l
 ;;
# print all the matched lines
-p) echo "Lines matches with the pattern $2 :"
 grep -i $2 $3
 ;;
# Delete all the lines matches with the pattern
-d) echo "After deleting the lines matches with the pattern $2 :"
 sed -n "/$2/!p" $3
 ;;
*) echo "Invalid option"
 ;;
esac

การดำเนินการของสคริปต์ข้างต้นแสดงอยู่ด้านล่าง

$ cat text
Vim is a text editor released by Bram Moolenaar in 1991 for the Amiga computer.
The name "Vim" is an acronym for "Vi IMproved" because Vim was created as an extended version of the vi editor, with many additional features designed to be helpful in editing program source code.
Although Vim was originally released for the Amiga, Vim has since been developed to be cross-platform, supporting many other platforms.
It is the most popular editor amongst Linux Journal readers.

เอาต์พุต regex ของเคส Bash หลังจากลบเส้นตรงกับรูปแบบ Vim:

$ ./fileop.sh -d Vim text
It is the most popular editor amongst Linux Journal readers.

โปรดดูบทความก่อนหน้าของเราเกี่ยวกับ Bash ~ expansaion และ { } ส่วนขยาย

Bash Case Example 3. ค้นหาประเภทไฟล์จากส่วนขยาย

ตัวอย่างนี้พิมพ์ประเภทของไฟล์ (ข้อความ Csource ฯลฯ) ตามนามสกุลของไฟล์

$ cat filetype.sh
#!/bin/bash
for filename in $(ls)
do
 # Take extension available in a filename
 ext=${filename##*\.}
 case "$ext" in
 c) echo "$filename : C source file"
 ;;
 o) echo "$filename : Object file"
 ;;
 sh) echo "$filename : Shell script"
 ;;
 txt) echo "$filename : Text file"
 ;;
 *) echo " $filename : Not processed"
 ;;
esac
done

$ ./filetype.sh
a.c : C source file
b.c : C source file
c1.txt : Text file
fileop.sh : Shell script
obj.o : Object file
text : Not processed
t.o : Object file

Bash Case Example 4. แจ้งผู้ใช้ว่าใช่หรือไม่

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

$ cat yorno.sh
#!/bin/bash

echo -n "Do you agree with this? [yes or no]: "
read yno
case $yno in

 [yY] | [yY][Ee][Ss] )
 echo "Agreed"
 ;;

 [nN] | [n|N][O|o] )
 echo "Not agreed, you can't proceed the installation";
 exit 1
 ;;
 *) echo "Invalid input"
 ;;
esac

$ ./yorno.sh
Do you agree with this? [yes or no]: YES
Agreed

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

โปรดดูบทความตัวอย่าง 15 bash array ก่อนหน้าของเรา

Bash Case Example 5. สคริปต์เริ่มต้น

สคริปต์เริ่มต้นในไดเร็กทอรี /etc/init.d ใช้คำสั่ง case เพื่อเริ่มต้นและหยุดแอปพลิเคชัน

คุณสามารถใช้รูปแบบใดก็ได้ แต่แนะนำให้ใช้คำสั่ง case เมื่อคุณทดสอบค่าของ primitives (เช่น จำนวนเต็มหรืออักขระ)

$ cat startpcapp
#!/bin/bash

case "$1" in
'start')
echo "Starting application"
/usr/bin/startpc
;;
'stop')
echo "Stopping application"
/usr/bin/stoppc
;;
'restart')
echo "Usage: $0 [start|stop]"
;;
esac

$ ./startpcapp start
Starting application
/usr/bin/startpc started

แนะนำให้อ่าน

5 ตัวอย่างคำชี้แจงกรณีทุบตีBash 101 Hacks โดย Ramesh Natarajan . ฉันใช้เวลาส่วนใหญ่กับสภาพแวดล้อม Linux โดยธรรมชาติแล้วฉันเป็นแฟนตัวยงของ Bash command line และ shell scripting 15 ปีที่แล้ว ตอนที่ฉันทำงานกับ *nix รสชาติต่างๆ ฉันเคยเขียนโค้ดจำนวนมากบน C shell และ Korn shell หลายปีต่อมา เมื่อฉันเริ่มทำงานบน Linux ในฐานะผู้ดูแลระบบ ฉันทำได้ค่อนข้างอัตโนมัติทุกงานที่เป็นไปได้โดยใช้ Bash shell scripting จากประสบการณ์ Bash ของฉัน ฉันได้เขียน Bash 101 Hacks eBook ที่มีตัวอย่างเชิงปฏิบัติ 101 ตัวอย่างทั้งบรรทัดคำสั่ง Bash และเชลล์สคริปต์ หากคุณกำลังคิดเกี่ยวกับการควบคุม Bash ให้เชี่ยวชาญ ลองอ่านหนังสือเล่มนี้ดู ซึ่งจะช่วยให้คุณควบคุมบรรทัดคำสั่งและเชลล์สคริปต์ของ Bash ได้