Faith Evans feat. Stevie J – "A Minute" [Official Music Video]
สารบัญ:
ฟังก์ชั่น Bash นั้นเป็นชุดคำสั่งที่สามารถเรียกได้หลายครั้ง วัตถุประสงค์ของฟังก์ชั่นคือช่วยให้คุณทำให้สคริปสคริปต์ของคุณอ่านได้ง่ายขึ้นและเพื่อหลีกเลี่ยงการเขียนโค้ดเดิมซ้ำแล้วซ้ำอีก
เปรียบเทียบกับภาษาโปรแกรมส่วนใหญ่แล้วฟังก์ชั่น Bash นั้นค่อนข้าง จำกัด ในบทช่วยสอนนี้เราจะกล่าวถึงพื้นฐานของฟังก์ชั่น Bash และแสดงวิธีใช้มันในเชลล์สคริปต์ของคุณ
การประกาศฟังก์ชัน Bash
ไวยากรณ์สำหรับการประกาศฟังก์ชัน bash นั้นง่ายมาก พวกเขาอาจประกาศในสองรูปแบบที่แตกต่างกัน:
-
รูปแบบแรกเริ่มต้นด้วยชื่อฟังก์ชั่นตามด้วยวงเล็บ นี่เป็นรูปแบบที่ต้องการและใช้งานมากกว่า
function_name () { commands }
รุ่นบรรทัดเดียว:
function_name () { commands; }
รูปแบบที่สองเริ่มต้นด้วยคำที่สงวนไว้ของ
function
ตามด้วยชื่อฟังก์ชันfunction function_name { commands }
รุ่นบรรทัดเดียว:
function function_name { commands; }
คะแนนน้อยที่ควรสังเกต:
- รายการคำสั่งระหว่างเครื่องหมายปีกกา
{}
คือเนื้อความของฟังก์ชัน วงเล็บปีกกาที่ล้อมรอบร่างกายของฟังก์ชั่นจะต้องแยกออกจากร่างกายด้วยช่องว่างหรือการขึ้นบรรทัดใหม่การกำหนดฟังก์ชั่นไม่ได้ดำเนินการ ในการเรียกใช้ฟังก์ชัน bash ให้ใช้ชื่อฟังก์ชัน คำสั่งระหว่างวงเล็บปีกกาจะถูกดำเนินการเมื่อใดก็ตามที่ฟังก์ชั่นที่เรียกว่าในสคริปต์เปลือกคำจำกัดความฟังก์ชั่นจะต้องวางไว้ก่อนที่จะเรียกฟังก์ชั่นใด ๆ เมื่อใช้บรรทัดเดียว ต้องทำตามคำสั่งสุดท้ายในฟังก์ชั่นคุณควรพยายามทำให้ชื่อฟังก์ชั่นของคุณอธิบาย
เพื่อให้เข้าใจสิ่งนี้ดีขึ้นลองดูตัวอย่างต่อไปนี้:
~ / hello_world.sh
#!/bin/bash hello_world () { echo 'hello, world' } hello_world
ลองวิเคราะห์โค้ดทีละบรรทัด:
- ในบรรทัดที่
3
เรากำหนดฟังก์ชั่นโดยให้ชื่อและเปิดวงเล็บปีกกา{
ซึ่งเป็นจุดเริ่มต้นของร่างกายของฟังก์ชั่นไลน์4
คือร่างกายของฟังก์ชั่น ฟังก์ชั่นร่างกายสามารถมีหลายคำสั่งและการประกาศตัวแปรไลน์5
, วงเล็บปีกกาปิด}
, กำหนดจุดสิ้นสุดของฟังก์ชั่นhello_world
บรรทัด7
เรากำลังดำเนินการฟังก์ชั่น คุณสามารถใช้งานฟังก์ชั่นได้หลายครั้งตามที่คุณต้องการ
หากคุณเรียกใช้สคริปต์สคริปต์จะพิมพ์คำว่า
hello, world
ขอบเขตตัวแปร
ตัวแปรทั่วโลกเป็นตัวแปรที่สามารถเข้าถึงได้จากทุกที่ในสคริปต์โดยไม่คำนึงถึงขอบเขต ใน Bash ตัวแปรทั้งหมดจะถูกกำหนดเป็นค่าเริ่มต้นแม้ว่าจะประกาศภายในฟังก์ชัน
ตัวแปรท้องถิ่นสามารถประกาศภายในเนื้อหาของฟังก์ชั่นด้วยคีย์เวิร์ด
local
และสามารถใช้ได้เฉพาะภายในฟังก์ชันนั้น คุณสามารถมีตัวแปรท้องถิ่นที่มีชื่อเดียวกันในฟังก์ชั่นที่แตกต่างกัน
เพื่อแสดงให้เห็นว่าขอบเขตตัวแปรทำงานใน Bash ได้ดีขึ้นอย่างไรลองพิจารณาตัวอย่าง:
~ / variables_scope.sh
#!/bin/bash var1='A' var2='B' my_function () { local var1='C' var2='D' echo "Inside function: var1: $var1, var2: $var2" } echo "Before executing function: var1: $var1, var2: $var2" my_function echo "After executing function: var1: $var1, var2: $var2"
สคริปต์เริ่มต้นด้วยการกำหนดตัวแปรโกลบอลสองตัวคือ
var1
และ
var2
จากนั้นฟังก์ชันที่ตั้งค่าตัวแปรโลคัล
var1
และแก้ไขตัวแปรโกลบอล
var2
Before executing function: var1: A, var2: B Inside function: var1: C, var2: D After executing function: var1: A, var2: D
จากผลลัพธ์ข้างต้นเราสามารถสรุปได้ว่า:
- หากคุณตั้งค่าตัวแปรโลคัลภายในเนื้อความฟังก์ชันที่มีชื่อเดียวกับตัวแปรโกลบอลที่มีอยู่มันจะมีความสำคัญเหนือกว่าตัวแปรโกลบอลตัวแปรโกลบอลสามารถเปลี่ยนได้จากภายในฟังก์ชัน
คืนค่า
ซึ่งแตกต่างจากฟังก์ชั่นในภาษาการเขียนโปรแกรม“ ของจริง” ฟังก์ชั่น Bash ไม่อนุญาตให้คุณส่งคืนค่าเมื่อมีการเรียก เมื่อฟังก์ชัน bash เสร็จสมบูรณ์ค่าส่งคืนคือสถานะของคำสั่งสุดท้ายที่ดำเนินการในฟังก์ชัน
0
สำหรับหมายเลขสำเร็จและเลขฐานสิบที่ไม่ใช่ศูนย์ในช่วง 1 - 255 สำหรับความล้มเหลว
สถานะการส่งคืนสามารถระบุได้โดยใช้คีย์เวิร์ด
return
และถูกกำหนดให้กับตัวแปร
$?
. คำสั่ง
return
จะยกเลิกฟังก์ชั่น คุณสามารถคิดว่ามันเป็นสถานะการออกของฟังก์ชั่น
#!/bin/bash my_function () { echo "some result" return 55 } my_function echo $?
some result 55
ในการคืนค่าโดยพลการจากฟังก์ชั่นจริงเราต้องใช้วิธีการอื่น ตัวเลือกที่ง่ายที่สุดคือการกำหนดผลลัพธ์ของฟังก์ชันให้กับตัวแปรโกลบอล:
~ / return_values.sh
#!/bin/bash my_function () { func_result="some result" } my_function echo $func_result
some result
ตัวเลือกที่ดีกว่าเพื่อส่งคืนค่าจากฟังก์ชั่นคือการส่งค่าไปยัง
stdout
โดยใช้ echo หรือ
printf
ดังแสดงด้านล่าง:
#!/bin/bash my_function () { local func_result="some result" echo "$func_result" } func_result="$(my_function)" echo $func_result
some result
แทนที่จะเรียกใช้ฟังก์ชั่นที่จะพิมพ์ข้อความไปยัง stdout เราจะกำหนดฟังก์ชั่นเอาท์พุทให้กับตัวแปร
func_result
โดยใช้การแทนที่คำสั่ง
$()
ตัวแปรนี้สามารถใช้งานได้ตามต้องการ
ผ่านการโต้แย้งไปยังฟังก์ชั่นทุบตี
ในการผ่านจำนวนอาร์กิวเมนต์ใด ๆ ไปยังฟังก์ชันทุบตีเพียงแค่ใส่พวกเขาทันทีหลังจากชื่อของฟังก์ชั่นคั่นด้วยช่องว่าง เป็นวิธีปฏิบัติที่ดีในการอ้างอาร์กิวเมนต์เพื่อหลีกเลี่ยงการทะเลาะกันด้วยช่องว่าง
- พารามิเตอร์ที่ส่งผ่านคือ
$1
,$2
,$3
…$n
, ซึ่งสอดคล้องกับตำแหน่งของพารามิเตอร์หลังจากชื่อฟังก์ชั่นของตัวแปร$0
ถูกสงวนไว้สำหรับชื่อของฟังก์ชั่นตัวแปร$#
ถือจำนวนพารามิเตอร์ / อาร์กิวเมนต์ที่ส่งผ่านไปยัง function.The ตัวแปร$*
และ$@
เก็บพารามิเตอร์ / อาร์กิวเมนต์ของตำแหน่งที่ส่งผ่านไปยังฟังก์ชันทั้งหมด- เมื่อใส่เครื่องหมายอัญประกาศคู่
"$*"
จะขยายเป็นสตริงเดี่ยวคั่นด้วยช่องว่าง (อักขระตัวแรกของ IFS) -"$1 $2 $n"
เมื่อยกมาเป็นสองเท่า"$@"
จะขยายเป็นสตริงแยก -"$1" "$2" "$n"
เมื่อไม่ยกมาสองเท่า$*
และ$@
เหมือนกัน
- เมื่อใส่เครื่องหมายอัญประกาศคู่
นี่คือตัวอย่าง:
~ / passing_arguments.sh
#!/bin/bash greeting () { echo "Hello $1" } greeting "Joe"
ข้อสรุป
ฟังก์ชั่น Bash เป็นบล็อกของรหัสที่ใช้ซ้ำได้ซึ่งออกแบบมาเพื่อดำเนินการเฉพาะ เมื่อกำหนดแล้วฟังก์ชันสามารถเรียกหลาย ๆ ครั้งภายในสคริปต์
คุณอาจต้องการอ่านเกี่ยวกับวิธีใช้ฟังก์ชัน Bash เพื่อสร้างคำสั่งทางลัดที่น่าจดจำสำหรับคำสั่งที่ยาวขึ้น
bash terminal