Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> बाश प्रोग्रामिंग

बैश शैल फंक्शन ट्यूटोरियल 6 व्यावहारिक उदाहरणों के साथ

बैश शैल फंक्शन ट्यूटोरियल 6 व्यावहारिक उदाहरणों के साथबैश शेल फ़ंक्शन समूह के लिए एकल नाम का उपयोग करके बाद में निष्पादन के लिए कई UNIX / Linux कमांड को समूहबद्ध करने का एक तरीका है। . बैश शेल फ़ंक्शन को नियमित यूनिक्स कमांड की तरह ही निष्पादित किया जा सकता है। शेल फ़ंक्शंस को मौजूदा शेल संदर्भ में उनकी व्याख्या करने के लिए कोई नई प्रक्रिया बनाए बिना निष्पादित किया जाता है।

बैश उपनाम और फ़ंक्शन दोनों आपको लंबे या अधिक जटिल कमांड के लिए शॉर्टकट परिभाषित करने की अनुमति देते हैं। हालांकि, उपनाम नियंत्रण-प्रवाह, तर्क, और अन्य प्रवंचना वाली चीजों की अनुमति नहीं देते हैं, जैसा कि इस ट्यूटोरियल में बताया गया है।

यह लेख चल रहे बैश ट्यूटोरियल श्रृंखला का हिस्सा है। बैश परिचय, बैश मौजूद स्थिति और बैश उपनाम उदाहरणों के बारे में हमारे पहले के ट्यूटोरियल का संदर्भ लें।

बैश फ़ंक्शन बनाने के लिए सिंटैक्स:

function functionname()
{
commands
.
.
}
  • फ़ंक्शन एक कीवर्ड है जो वैकल्पिक है।
  • कार्यनाम समारोह का नाम है
  • आदेश - कार्यों में निष्पादित किए जाने वाले आदेशों की सूची।

फ़ंक्शन तर्क स्वीकार करता है। निष्पादन के दौरान, फ़ंक्शन के तर्क स्थितीय पैरामीटर बन जाते हैं। स्थितीय पैरामीटर 0 में स्क्रिप्टनाम होगा जो अपरिवर्तित रहेगा।

आप कमांड लाइन से बैश फ़ंक्शन को नीचे दिखाए अनुसार कॉल कर सकते हैं:

$ functionname arg1 arg2
  • जब शेल लिनक्स कमांड की व्याख्या करता है, तो यह पहले ब्रेक, कंटिन्यू, इवल, एक्ज़ेक आदि जैसे विशेष बिल्ट-इन फ़ंक्शंस को देखता है, फिर यह शेल फ़ंक्शंस की तलाश करता है।
  • बैश फ़ंक्शन की निकास स्थिति फ़ंक्शन बॉडी में निष्पादित अंतिम कमांड की निकास स्थिति है।

नोट: शेल फ़ंक्शन परिभाषाओं को शेल स्टार्ट अप फ़ाइल में रखें (उदाहरण के लिए, .bash_profile )। इस तरह, शेल फ़ंक्शन आपके लिए कमांड लाइन से हमेशा उपलब्ध होता है। यह पहचानने के लिए कि .bash_profile कब निष्पादित होगा, हमारे पहले के बैश निष्पादन अनुक्रम लेख का संदर्भ लें।

उदाहरण 1:दिए गए एक्सटेंशन के साथ फाइलों की लंबी सूची प्रदर्शित करने का कार्य

फ़ंक्शन "lsext" का उपयोग वर्तमान निर्देशिका में फ़ाइलों की सूची को खोजने के लिए किया जाता है, जिसमें नीचे दिखाया गया एक्सटेंशन दिया गया है। यह फ़ंक्शन काम पूरा करने के लिए फाइंड कमांड और ls कमांड के संयोजन का उपयोग करता है।

<केंद्र>
$ function lsext()
{
find . -type f -iname '*.'${1}'' -exec ls -l {} \; ;
}

$ cd ~

$ lsext txt
-rw-r--r-- 1 root root 24 Dec 15 14:00 InMorning.txt
-rw-r--r-- 1 root root 184 Dec 16 11:45 Changes16.txt
-rw-r--r-- 1 root root 458 Dec 18 11:04 Changes18.txt
-rw-r--r-- 1 root root 1821 Feb 4 15:01 ChangesOfDB.txt

उदाहरण 2. फ़ाइलों के समूह पर दिए गए Linux कमांड को निष्पादित करने के लिए बैश फ़ंक्शन

निम्नलिखित उदाहरण में, फ़ंक्शन "batchexec" दिए गए एक्सटेंशन वाली फ़ाइलों को ढूंढता है और उन चयनित फ़ाइलों पर दिए गए कमांड को निष्पादित करता है।

$ function batchexec()
{
find . -type f -iname '*.'${1}'' -exec ${@:2} {} \; ;
}

$ cd ~

$ batchexec sh ls

$ batchexec sh chmod 755

$ ls -l *.sh
-rwxr-xr-x 1 root root 144 Mar 9 14:39 debug.sh
-rwxr-xr-x 1 root root 5431 Jan 25 11:32 get_opc_vers.sh
-rwxr-xr-x 1 root root 22 Mar 18 08:32 t.sh

उपरोक्त उदाहरण में, यह .sh एक्सटेंशन के साथ सभी शेल स्क्रिप्ट फ़ाइलों को ढूंढता है, और इसकी अनुमति को 755 में बदल देता है। (उपयोगकर्ता के लिए सभी अनुमति, समूह और अन्य के लिए अनुमति पढ़ें और निष्पादित करें)। फ़ंक्शन परिभाषा में आप "${@:2}" देख सकते हैं जो दूसरा और निम्नलिखित स्थितीय पैरामीटर (शेल विस्तार सुविधा) देता है।

उदाहरण 3. रैंडम पासवर्ड जेनरेट करने के लिए बैश फंक्शन

निम्नलिखित फ़ंक्शन का उपयोग दी गई लंबाई के लिए विशेष वर्ण वाले यादृच्छिक मजबूत पासवर्ड उत्पन्न करने के लिए किया जाता है। यदि लंबाई डिफ़ॉल्ट रूप से नहीं दी जाती है तो यह 12 वर्णों की लंबाई के साथ उत्पन्न होती है।

$ function rpass() {
 cat /dev/urandom | tr -cd '[:graph:]' | head -c ${1:-12}
}

$ rpass 6
-Ju.T[[

$ rpass
Gz1f!aKN^""k

उपरोक्त उदाहरण में, जब rpass को तर्क 6 के साथ निष्पादित किया जाता है, तो यह 6 वर्णों के साथ यादृच्छिक पासवर्ड उत्पन्न करता है और बिना तर्क के rpass 12 वर्ण लंबाई का पासवर्ड उत्पन्न करता है। ${1:-12} का अर्थ है कि यदि $1 सेट नहीं है या शून्य 12 वापस कर दिया जाएगा अन्यथा $1 का मूल्य प्रतिस्थापित किया जाएगा।

उदाहरण 4. किसी दिए गए इंटरफ़ेस का IP पता प्राप्त करने के लिए बैश फ़ंक्शन

निम्नलिखित उदाहरण 'गेटिप' नामक एक फ़ंक्शन को परिभाषित करता है जो इंटरफ़ेस नाम को एक तर्क के रूप में स्वीकार करता है, और मशीन में दिए गए इंटरफ़ेस पर निर्दिष्ट आईपी पता देता है। (डिफ़ॉल्ट रूप से यह eth0 ip पता देता है)। यह आईपी-पता प्राप्त करने के लिए ifconfig कमांड का उपयोग करता है।

$ function getip()
{
/sbin/ifconfig ${1:-eth0} | awk '/inet addr/ {print $2}' | awk -F: '{print $2}';
}

$ getip
15.110.106.86

$ getip eth0
15.110.106.86

$ getip lo
127.0.0.1

उदाहरण 5. मशीनों के विवरण को प्रिंट करने के लिए बैश फ़ंक्शन

यह उदाहरण उस फ़ंक्शन को परिभाषित करता है जो मशीन के बारे में सभी आवश्यक जानकारी देता है। उपयोगकर्ता इस फ़ंक्शन को स्टार्ट अप फ़ाइलों में परिभाषित और कॉल कर सकते हैं, ताकि स्टार्टअप के दौरान आपको ये जानकारी मिल सके।

$ function mach()
{
 echo -e "\nMachine information:" ; uname -a
 echo -e "\nUsers logged on:" ; w -h
 echo -e "\nCurrent date :" ; date
 echo -e "\nMachine status :" ; uptime
 echo -e "\nMemory status :" ; free
 echo -e "\nFilesystem status :"; df -h
}

$ mach
Machine information:
Linux dev-db 2.6.18-128.el5 #1 SMP Wed Dec 17 11:41:38 EST 2008 x86_64 GNU/Linux

Users logged on:
root pts/2 ptal.mot Wed10 0.00s 1.35s 0.01s w -h

Current date :
Thu Mar 18 11:59:36 CET 2010

Machine status :
 11:59:36 up 7 days, 3 min, 1 user, load average: 0.01, 0.15, 0.15

Memory status :
 total used free shared buffers cached
Mem: 2059768 2033212 26556 0 81912 797560
-/+ buffers/cache: 1153740 906028
Swap: 4192956 48164 4144792

Filesystem status :
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 12G 12G 0 100% /
tmpfs 1006M 377M 629M 38% /dev/shm
/dev/sdc5 9.9G 409M 9.0G 5% /mydisk

उदाहरण 6:ls आउटपुट को बेहतर तरीके से प्रारूपित करने के लिए बैश फ़ंक्शन

निम्न फ़ंक्शन स्क्रीन को साफ़ करेगा, कर्सर को स्क्रीन के शीर्ष पर रखेगा, ls निष्पादित करेगा, और फिर कर्सर को स्क्रीन के अंत में रखेगा।

$ function ll ()
{
 clear;
 tput cup 0 0;
 ls --color=auto -F --color=always -lhFrt;
 tput cup 40 0;
}

$ ll

टाइप कमांड का उपयोग करके फंक्शन कोड प्रदर्शित करें

type एक शेल बिल्ट-इन है जिसका उपयोग फंक्शन कोड देखने के लिए किया जाता है।

Syntax:
type function-name
$ type ll
ll is a function
ll ()
{
 clear;
 tput cup 0 0;
 ls --color=auto -F --color=always -lhFrt;
 tput cup 40 0;
 alias ls="ls --color=auto -F"
}

आपके आसान संदर्भ के लिए, इस आलेख में उल्लिखित सभी 6 कार्यों को इस नमूने .bash_profile फ़ंक्शन फ़ाइल से प्राप्त करें।

इन सभी कार्यों को अपनी ~/.bash_profile फ़ाइल में जोड़ें, यह सुनिश्चित करने के लिए कि आपके पास इन कार्यों को हर समय बनाए बिना हर समय पहुंच है।


  1. बैश वैरिएबल ट्यूटोरियल - 6 प्रैक्टिकल बैश ग्लोबल और लोकल वेरिएबल उदाहरण

    यह लेख हमारी चल रही बैश ट्यूटोरियल श्रृंखला का हिस्सा है। किसी भी अन्य प्रोग्रामिंग भाषाओं की तरह, बैश भी चर प्रदान करता है। बैश चर जानकारी के लिए अस्थायी भंडारण प्रदान करते हैं जिसकी कार्यक्रम के जीवनकाल के दौरान आवश्यकता होगी।सिंटैक्स: VARNAME=VALUE नोट: वेरिएबल असाइनमेंट में = साइन के आसपास कोई

  1. बैश स्क्रिप्टिंग परिचय ट्यूटोरियल 5 व्यावहारिक उदाहरणों के साथ

    हमारी चल रही यूनिक्स सेड और यूनिक्स Awk श्रृंखला के समान, हम बैश स्क्रिप्टिंग पर कई लेख पोस्ट करेंगे, जो सभी बैश स्क्रिप्टिंग तकनीकों को व्यावहारिक उदाहरणों के साथ कवर करेगा। शेल एक प्रोग्राम है, जो यूजर कमांड की व्याख्या करता है। कमांड या तो उपयोगकर्ता द्वारा सीधे दर्ज किए जाते हैं या शेल स्क्रिप्

  1. एक्सेल में डाटाबेस फंक्शंस का उपयोग कैसे करें (उदाहरण के साथ)

    यह आलेख बताता है कि एक्सेल में डेटाबेस फ़ंक्शंस का उपयोग कैसे करें। एक्सेल में 12 डेटाबेस फंक्शन होते हैं। यह आलेख दिखाता है कि उन्हें एक-एक करके कैसे लागू किया जाए। निम्नलिखित चित्र इस लेख के उद्देश्य पर प्रकाश डालता है। बाकी का उपयोग करना सीखने के लिए लेख पर एक नज़र डालें। आप नीचे दिए गए डाउनलो