जब आप प्रोग्रामिंग कर रहे होते हैं, तो आप सचमुच एक प्रक्रिया, या एक रूटीन को परिभाषित कर रहे होते हैं, जिसे आप कंप्यूटर को निष्पादित करना चाहते हैं। एक सरल सादृश्य कंप्यूटर प्रोग्रामिंग की तुलना ब्रेड बेक करने से करता है: आप सामग्री को एक बार सूचीबद्ध करते हैं कार्य वातावरण सेट करने के लिए, फिर आप उन चरणों को सूचीबद्ध करते हैं जिन्हें आपको ब्रेड का एक लोफ प्राप्त करने के लिए लेना होगा। प्रोग्रामिंग और बेकिंग दोनों में, कुछ चरणों को अलग-अलग अंतराल पर दोहराया जाना चाहिए। ब्रेड बेक करने में, उदाहरण के लिए, यह खट्टी डोउ कल्चर को खिलाने की प्रक्रिया हो सकती है:
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)
}
प्रोग्रामिंग में, इन सबरूटीन को फंक्शन के रूप में व्यक्त किया जा सकता है। फंक्शन प्रोग्रामर्स के लिए महत्वपूर्ण हैं क्योंकि वे कोड में अतिरेक को कम करने में मदद करते हैं, जो बदले में आवश्यक रखरखाव की मात्रा को कम करता है। उदाहरण के लिए, ब्रेड को प्रोग्रामेटिकली बेक करने के काल्पनिक परिदृश्य में, यदि आपको आटे के प्रूफ होने के समय की मात्रा बदलने की आवश्यकता है, जब तक आपने पहले एक फंक्शन का उपयोग किया है, आपको केवल सेकंड के मान को एक बार बदलना होगा, या तो एक वेरिएबल का उपयोग करके (SNOOZE नमूना कोड में कहा जाता है) या सीधे सबरूटीन में जो आटे को प्रोसेस करता है। यह आपको बहुत समय बचा सकता है, क्योंकि आपको अपने कोडबेस में राइजिंग डोउ के हर संभावित उल्लेख का शिकार नहीं करना पड़ता, इस बात की चिंता किए बिना कि कोई छूट गया है। कई बग एक छूटे हुए मान के कारण हुए हैं जो बदला नहीं गया या खराब निष्पादित sed कमांड की उम्मीद में हर अंतिम मैच को पकड़ने के लिए बिना मैन्युअल रूप से उनका शिकार किए।
बैश में, एक फंक्शन को परिभाषित करना उतना ही आसान है जितना कि इसे उस स्क्रिप्ट फाइल में सेट करना जिसे आप लिख रहे हैं या एक अलग फाइल में। यदि आप फंक्शन को एक समर्पित फाइल में सहेजते हैं, तो आप इसे अपनी स्क्रिप्ट में source कर सकते हैं जैसे आप C या C++ में include लाइब्रेरी या पायथन में import मॉड्यूल करेंगे। एक बैश फंक्शन बनाने के लिए, कीवर्ड function का उपयोग करें:
function foo {
# यहाँ कोड
}
यहाँ एक सरल (और कुछ हद तक बनावटी, क्योंकि इसे सरल बनाया जा सकता था) उदाहरण है कि कैसे एक फंक्शन तर्कों के साथ काम करता है:
#!/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
स्क्रिप्ट की अंतिम पंक्ति पर ध्यान दें, जो फंक्शन को निष्पादित करती है। यह शुरुआती स्क्रिप्टर्स और प्रोग्रामर्स के लिए भ्रम का एक सामान्य बिंदु है: फंक्शन स्वचालित रूप से निष्पादित नहीं होते हैं। वे संभावित रूटीन के रूप में मौजूद होते हैं जब तक उन्हें बुलाया नहीं जाता।
फंक्शन को कॉल करने वाली लाइन के बिना, फंक्शन केवल परिभाषित होगा और कभी नहीं चलेगा।
यदि आप बैश में नए हैं, तो नमूना स्क्रिप्ट को अंतिम पंक्ति के साथ एक बार निष्पादित करने का प्रयास करें और फिर अंतिम पंक्ति को कमेंट आउट करके फिर से।
फंक्शन का उपयोग करना
फंक्शन महत्वपूर्ण प्रोग्रामिंग अवधारणाएं हैं, यहां तक कि सरल स्क्रिप्ट के लिए भी। जितना अधिक आप फंक्शन के साथ सहज होते हैं, उतना ही बेहतर होगा जब आप एक जटिल समस्या का सामना करेंगे जिसे केवल कमांड की घोषणात्मक लाइनों से अधिक गतिशील कुछ चाहिए। सामान्य-उद्देश्य फंक्शन को अलग फाइलों में रखना भी आपका कुछ काम बचा सकता है, क्योंकि यह आपको उन रूटीन को बनाने में मदद करेगा जिनका आप आमतौर पर उपयोग करते हैं ताकि आप उन्हें प्रोजेक्ट्स में पुन: उपयोग कर सकें। अपनी स्क्रिप्टिंग आदतों को देखें और देखें कि फंक्शन कहाँ फिट हो सकते हैं।