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

เชี่ยวชาญ Bash Functions: เขียนสคริปต์ที่นำกลับมาใช้ซ้ำได้อย่างมืออาชีพ

บทนำ

เมื่อคุณเขียนโปรแกรม คุณกำลังกำหนด procedure หรือ routine ที่คุณต้องการให้คอมพิวเตอร์ทำ เหมือนกับการทำขนมปัง: คุณระบุส่วนผสมครั้งเดียวเพื่อตั้งค่าสภาพแวดล้อมการทำงาน แล้วระบุขั้นตอนที่คุณต้องทำเพื่อให้ได้ขนมปังหนึ่งก้อน ทั้งการเขียนโปรแกรมและการทำขนมปัง บางขั้นตอนต้องทำซ้ำในช่วงเวลาต่างกัน ในการทำขนมปัง ตัวอย่างเช่น กระบวนการเลี้ยงวัฒนธรรม sourdough:

STIR=100
SNOOZE=86400

function feed_culture {
remove_from(pantry)
add(flour, water)
stir($STIR)
sleep($SNOOZE)
}

และภายหลัง การนวดและการพักแป้ง:

KNEAD=600
SNOOZE=7200

function process_dough {
remove_from(proofing_drawer)
knead($KNEAD)
return_to_drawer($SNOOZE)
}

ในการเขียนโปรแกรม สูตรย่อยเหล่านี้สามารถแสดงเป็น functions Functions สำคัญสำหรับโปรแกรมเมอร์เพราะช่วยลด redundancy ในโค้ด ซึ่งลดการบำรุงรักษาลง ตัวอย่าง ในสถานการณ์จินตนาการทำขนมปังแบบโปรแกรม หากคุณต้องเปลี่ยนเวลาที่แป้งพัก ตราบใดที่คุณใช้ function มาก่อน คุณเพียงแค่เปลี่ยนค่าวินาทีครั้งเดียว ไม่ว่าจะใช้ variable (ชื่อ SNOOZE ในโค้ดตัวอย่าง) หรือโดยตรงใน subroutine ที่ประมวลผลแป้ง นี่ประหยัดเวลามาก เพราะคุณไม่ต้องล่าผ่าน codebase สำหรับทุกการกล่าวถึงแป้งที่ขึ้นฟู รวมถึงไม่ต้องกังวลว่าจะพลาดอันไหนอันหนึ่ง Bugs หลายตัวเกิดจากค่าที่พลาดไม่ได้เปลี่ยน หรือคำสั่ง sed ที่ทำไม่ได้ในการจับทุก match โดยไม่ต้องล่าด้วยมือ

ใน Bash การกำหนด function ง่ายเท่ากับการตั้งค่าในไฟล์สคริปต์ที่คุณเขียน หรือในไฟล์แยก หากคุณบันทึก functions ไว้ในไฟล์เฉพาะ คุณสามารถ source มันเข้าไปในสคริปต์ของคุณเหมือน include library ใน C/C++ หรือ import module ใน Python ในการสร้าง Bash function ใช้คีย์เวิร์ด function:

function foo {
# code here
}

นี่คือตัวอย่างง่าย (และค่อนข้าง contrived เนื่องจากอาจทำให้เรียบง่ายกว่านี้) ว่า function ทำงานกับ arguments อย่างไร:

#!/usr/bin/env bash
ARG=$1

function mimic {
if [[ -z $ARG ]]; then
ARG='world'
fi
echo "hello $ARG"
}

mimic $ARG

ผลลัพธ์:

$ ./mimic
hello world
$ ./mimic everybody
hello everybody

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

โดยไม่มีบรรทัดที่เรียก function function จะถูก define เท่านั้น และไม่มีวันรัน

หากคุณใหม่กับ Bash ลองรันสคริปต์ตัวอย่างครั้งหนึ่งกับบรรทัดสุดท้ายรวมอยู่ และอีกครั้งกับบรรทัดสุดท้าย commented out

การใช้งาน Functions

Functions เป็นแนวคิดการเขียนโปรแกรมที่สำคัญ แม้สำหรับสคริปต์ง่ายๆ ยิ่งคุณคุ้นเคยกับ functions ยิ่งคุณจะได้เปรียบเมื่อเผชิญปัญหาที่ซับซ้อนที่ต้องการสิ่งที่ dynamic มากกว่าคำสั่ง declarative ตรงๆ การเก็บ general-purpose functions ในไฟล์แยกก็ช่วยประหยัดงานได้ เพราะจะช่วยคุณสร้าง routines ที่คุณใช้บ่อย เพื่อนำกลับมาใช้ซ้ำข้ามโปรเจคได้ มองที่นิสัยการเขียนสคริปต์ของคุณ และดูว่า functions อาจเข้ากับที่ไหน