Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Bash प्रोग्रामिंग

Bash शेल फ़ंक्शन्स में मास्टर करें: 6 व्यावहारिक उदाहरण और टिप्स

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

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

यह लेख चल रहे bash ट्यूटोरियल सीरीज़ का हिस्सा है। bash परिचय, bash एग्जिट स्टेटस और bash alias उदाहरणों पर हमारे पहले के ट्यूटोरियल देखें।

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

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

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

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

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

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

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

"lsext" फ़ंक्शन का उपयोग वर्तमान निर्देशिका में फ़ाइलों की सूची खोजने के लिए किया जाता है, जिसमें दिया गया एक्सटेंशन होता है जैसा कि नीचे दिखाया गया है। यह फ़ंक्शन काम पूरा करने के लिए find कमांड और 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 कमांड को निष्पादित करने का Bash फ़ंक्शन

निम्नलिखित उदाहरण में, फ़ंक्शन "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. यादृच्छिक पासवर्ड जनरेट करने का Bash फ़ंक्शन

निम्नलिखित फ़ंक्शन का उपयोग दी गई लंबाई के लिए विशेष वर्ण के साथ मजबूत यादृच्छिक पासवर्ड जनरेट करने के लिए किया जाता है। यदि लंबाई नहीं दी गई है तो डिफ़ॉल्ट रूप से यह 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 अनसेट या null है तो 12 लौटाया जाएगा अन्यथा $1 का मान प्रतिस्थापित किया जाएगा।

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

निम्नलिखित उदाहरण 'getip' नामक एक फ़ंक्शन को परिभाषित करता है जो इंटरफ़ेस नाम को आर्ग्यूमेंट के रूप में स्वीकार करता है, और मशीन में दिए गए इंटरफ़ेस पर असाइन किए गए IP पते को देता है। (डिफ़ॉल्ट रूप से यह eth0 ip पता लौटाता है)। यह ip-address प्राप्त करने के लिए 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. मशीन का विवरण प्रिंट करने का Bash फ़ंक्शन

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

$ 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 आउटपुट को बेहतर ढंग से फॉर्मेट करने का Bash फ़ंक्शन

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

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

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

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

सिंटैक्स: 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. Bash वेरिएबल्स में मास्टर करें: ग्लोबल और लोकल उपयोग के 6 व्यावहारिक उदाहरण Bash वेरिएबल्स में मास्टर करें: ग्लोबल और लोकल उपयोग के 6 व्यावहारिक उदाहरण

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

  1. Bash स्क्रिप्टिंग में मास्टर करें: 5 वास्तविक-विश्व उदाहरणों के साथ एक व्यावहारिक परिचय Bash स्क्रिप्टिंग में मास्टर करें: 5 वास्तविक-विश्व उदाहरणों के साथ एक व्यावहारिक परिचय

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

  1. Excel डेटाबेस फ़ंक्शंस में महारत हासिल करें: व्यावहारिक उदाहरणों के साथ चरण-दर-चरण मार्गदर्शिका Excel डेटाबेस फ़ंक्शंस में महारत हासिल करें: व्यावहारिक उदाहरणों के साथ चरण-दर-चरण मार्गदर्शिका

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