Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม Bash

ฟังก์ชันใน Bash: สร้าง เรียกใช้ และนำโค้ดกลับมาใช้ใหม่อย่างมีประสิทธิภาพ

คู่มืออย่างรวดเร็วสำหรับการสร้างและเรียกใช้ฟังก์ชันใน Bash

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

Bash มีฟังก์ชันในตัว (built-in functions) เช่น echo และ read แต่เรายังสามารถสร้างฟังก์ชันของตัวเองได้อีกด้วย

การสร้างฟังก์ชันใน Bash

มีสองวิธีในการสร้างฟังก์ชันใน Bash:

วิธีแรก คือใช้ชื่อฟังก์ชันโดยตรง เช่น:

functionName(){
  // ขอบเขตของฟังก์ชัน
}

รูปแบบกระชับ:

functionName(){ echo "hello"; }

วิธีที่สอง คือประกาศฟังก์ชันโดยใช้คีย์เวิร์ด function:

function functionName {
  // ขอบเขตของฟังก์ชัน
}

รูปแบบกระชับ:

function functionName { echo "hello"; }

สังเกตว่าเมื่อใช้คีย์เวิร์ด function เราไม่จำเป็นต้องมี () หลังชื่อฟังก์ชัน

จุดสำคัญเกี่ยวกับฟังก์ชัน Bash:

  • โค้ดระหว่างวงเล็บปีกกา {} คือเนื้อหาและขอบเขตของฟังก์ชัน
  • เมื่อเรียกใช้ฟังก์ชัน เราเพียงใช้ชื่อฟังก์ชันจากที่ใดก็ได้ในสคริปต์ Bash
  • ฟังก์ชันต้องถูกกำหนดก่อนที่จะสามารถใช้งานได้
  • เมื่อใช้รูปแบบกระชับ คำสั่งสุดท้ายต้องมีเครื่องหมายอัฒภาค ;

ตัวอย่าง:

โค้ดต่อไปนี้สร้างฟังก์ชันที่พิมพ์ "Hello World" ออกมาที่คอนโซล ชื่อฟังก์ชันคือ printHello:

#!/bin/bash
printHello(){
  echo "Hello World!"
}

การเรียกใช้ฟังก์ชันใน Bash

เราเรียกฟังก์ชันข้างต้นอย่างไร? เพียงแค่เขียนชื่อฟังก์ชันในสคริปต์ Bash แล้วมันจะถูกเรียกใช้งาน

ตัวอย่าง:

#!/bin/bash
printHello(){
  echo "Hello World!"
}
# เรียกฟังก์ชัน printHello จากที่ใดก็ได้ในสคริปต์โดยเขียนชื่อมัน
printHello

ผลลัพธ์:

Hello World

การส่งอาร์กิวเมนต์

ฟังก์ชัน printHello() ข้างต้นไม่มีพารามิเตอร์ ทุกครั้งที่เราเรียกใช้ จะได้ผลลัพธ์ "Hello World" แต่ถ้าเราอยากสร้างฟังก์ชันที่เป็นทั่วไปมากขึ้น? เช่น เราส่งอาร์กิวเมนต์ให้ฟังก์ชันและมันพิมพ์สิ่งที่เราส่งไป

มีสองวิธีในการทำ

แรก เราสามารถปรับฟังก์ชัน printHello() ให้พิมพ์อาร์กิวเมนต์ที่ส่งมา:

#!/bin/bash
printAny(){
  echo "Hello " $1
}
printAny World
printAny DevQa
printAny I love coding!

ผลลัพธ์:

Hello World
Hello DevQA
Hello I

สังเกตว่า คำสั่งพิมพ์ครั้งที่สาม printAny I love coding! แสดงผลแค่ "Hello I" เท่านั้น

เพราะฟังก์ชันของเราออกแบบมาเพื่อรับพารามิเตอร์เพียง 1 ตัวคือ $1 คำว่า "I love coding!" จริงๆ แล้วเป็น 3 พารามิเตอร์

ถ้าอยากพิมพ์ทั้งหมด ต้องใช้เครื่องหมายคำพูดครอบข้อความ:

#!/bin/bash
printAny(){
  echo "Hello " $1
}
printAny "I love coding!"

ผลลัพธ์:

Hello I love coding

ตัวอย่างเพิ่มเติม เราสามารถส่งตัวเลขได้ด้วย:

#!/bin/bash
add() {
  result=$(($1 + $2))
  echo "Result is: $result"
}
add 1 2

ผลลัพธ์:

Result is: 3

การส่งค่ากลับ

ฟังก์ชัน Bash ยังสามารถส่งค่ากลับได้

ตัวอย่าง:

#!/bin/bash
add() {
  result=$(($1 + $2))
}
add 1 2
echo "The sum is: "$result

ผลลัพธ์:

The sum is: 3

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

#!/bin/bash
add () {
  local result=$(($1 + $2))
  echo "$result"
}
result="$(add 1 2)"
echo "The sum is: "$result

ผลลัพธ์:

The sum is: 3