Android

ฟังก์ชั่นทุบตี

Faith Evans feat. Stevie J – "A Minute" [Official Music Video]

Faith Evans feat. Stevie J – "A Minute" [Official Music Video]

สารบัญ:

Anonim

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

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

การประกาศฟังก์ชัน Bash

ไวยากรณ์สำหรับการประกาศฟังก์ชัน bash นั้นง่ายมาก พวกเขาอาจประกาศในสองรูปแบบที่แตกต่างกัน:

  1. รูปแบบแรกเริ่มต้นด้วยชื่อฟังก์ชั่นตามด้วยวงเล็บ นี่เป็นรูปแบบที่ต้องการและใช้งานมากกว่า

    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 จะยกเลิกฟังก์ชั่น คุณสามารถคิดว่ามันเป็นสถานะการออกของฟังก์ชั่น

~ / return_values.sh

#!/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 ดังแสดงด้านล่าง:

~ / return_values.sh

#!/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"

Hello Joe

ข้อสรุป

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

คุณอาจต้องการอ่านเกี่ยวกับวิธีใช้ฟังก์ชัน Bash เพื่อสร้างคำสั่งทางลัดที่น่าจดจำสำหรับคำสั่งที่ยาวขึ้น

bash terminal