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

วิธีใช้ฟังก์ชันใน Bash/Shell Scripts พร้อมตัวอย่าง

บทความนี้จะอธิบายวิธีใช้ ฟังก์ชัน ในสคริปต์ทุบตี – ช่วยให้คุณนำโค้ดกลับมาใช้ใหม่และทำให้สคริปต์ของคุณง่ายขึ้น

ทำไมต้องเขียนโค้ดหลายครั้ง ในเมื่อเขียนได้ครั้งเดียวแล้วใช้ซ้ำได้

นั่นคือสิ่งที่ทำหน้าที่ ให้คุณทำ

บทความนี้สรุปการใช้ฟังก์ชันในสคริปต์ Bash/Shell

ฟังก์ชันคืออะไร

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

ฟังก์ชันมักจะดำเนินการใดๆ เอาต์พุตหรือผลการพิมพ์ หรือคืนค่าสำหรับใช้ในอนาคต

เหตุใดจึงต้องใช้ฟังก์ชัน

ตัวอย่างเช่น คุณอาจมีสคริปต์ที่ส่งการแจ้งเตือนทางอีเมลว่ามีบางอย่างเกิดขึ้น หากคุณต้องการส่งอีเมลหลายฉบับไปยังผู้รับหลายราย คุณอาจเขียนรหัสการส่งอีเมลเดียวกันหลายครั้งในสคริปต์เพื่อส่งข้อความ

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

ไวยากรณ์ฟังก์ชันทุบตี

ไวยากรณ์สำหรับการเขียนฟังก์ชันในสคริปต์ Bash/Shell มีดังนี้:

name_of_function () {
    # COMMANDS
    # Optional return value
}

โปรดทราบว่า:

  • name_of_function เป็นชื่อที่คุณต้องการเรียกใช้ฟังก์ชันของคุณโดยใช้
    • เฉพาะตัวอักษรและตัวเลขและขีดล่างเท่านั้น!
  • ชื่อฟังก์ชันต้องตามด้วย () (วงเล็บมาตรฐาน)
    • สังเกตช่องว่างรอบวงเล็บ! จำเป็น!
  • โค้ดที่คุณต้องการให้ฟังก์ชันรันต้องอยู่ใน {} (วงเล็บปีกกา)
    • โค้ดใดๆ นอกวงเล็บปีกกาเหล่านี้ไม่ได้เป็นส่วนหนึ่งของฟังก์ชันและจะไม่ถูกดำเนินการ
  • คำสั่ง สามารถเป็นคำสั่งใด ๆ ที่มักจะมีอยู่ในระบบ Linux ของคุณ
  • คุณสามารถเลือก คืน ค่า – ดูตัวอย่างการใช้งานด้านล่าง
    • หากต้องการยุติฟังก์ชันก่อนกำหนด คุณยังสามารถโทร return ไม่มีค่าให้ออกจากฟังก์ชัน
    • ความพิเศษ $? ตัวแปรจะเก็บค่าที่ส่งคืนจากคำสั่งที่ดำเนินการล่าสุด ทำให้สามารถใช้ได้ที่อื่นในสคริปต์ของคุณหลังจากที่เรียกใช้ฟังก์ชันแล้ว

ตัวอย่างและคำอธิบาย

ต่อไปนี้คือตัวอย่างที่แสดงองค์ประกอบฟังก์ชัน Bash ต่างๆ ทั้งหมด โดยมีความคิดเห็นอธิบายสิ่งที่กำลังทำอยู่

#!/bin/bash

# Define a global variable - available anywhere in the script as it is not defined inside a function or loop
initial_value=3

# Define a function which does some mathematics
my_math_function () {

    # Get the parameters passed to the function 
    # Parameters are passed after the function name when calling the function, and will be named in order of appearance, starting with $1, then $2, etc
    # Below, these parameter values are assigned to local variables - available only inside the function - so that it's easier to tell what they are
    local multiplier_value=$1
    local addition_value=$2

    # Calculate the result and assign it to a local variable
    # Notice the $(( )) wrapping the calculations - this tells the script to assign the result of these calculations to the results variable, rather than assigning the calculations as a text value
    local result=$(( $initial_value * $multiplier_value + $addition_value ))

    # Print the result to the console
    # Depending on how the function is used, text output from the function can be used to read results from it
    echo $result

    # It is also possible to get output from the function using a return value
    return $result

}

# Call the function with different input parameters
# Parameters are passed to the function by typing them after the function separated by a space
# The function above expects two parameters - a multiplier_value and addition_value

my_math_function 2 4 # Will output 10 (2 * 3 + 4)

my_math_function 3 5 # Will output 14 (3 * 3 + 5)

# The $? is a special variable in Bash scripts which always holds the return value from the last executed command
# It can be used to get the value specified as the return value from the function.

echo $? # Will output 14

# Assign the result of the function to a variable
# This will assign any text outputted by the function (for example using the echo command) to a variable
my_result=$(my_math_function 6 7)
echo $my_result # Will output 25 (6 * 3 + 7)

'#!' ใน Linux Shell Scripts คืออะไร

ต้องการส่งค่าไปยังเชลล์สคริปต์ของคุณ (เพื่อให้คุณสามารถส่งต่อไปยังฟังก์ชันในนั้น) ได้หรือไม่ ตรวจสอบบทความนี้