एक सरणी एक वेरिएबल है जिसमें एक ही प्रकार के या अलग प्रकार के कई मान हो सकते हैं। सरणी के आकार की कोई अधिकतम सीमा नहीं है, और न ही किसी आवश्यकता है कि सदस्य वेरिएबल्स इंडेक्स्ड या सन्निकट रूप से असाइन किए जाएं। सरणी इंडेक्स शून्य से शुरू होता है।
इस लेख में, आइए bash में 15 विभिन्न सरणी संचालन की समीक्षा करें।
यह लेख चल रही Bash ट्यूटोरियल सीरीज़ का हिस्सा है। जो लोग bash स्क्रिप्टिंग में नए हैं, वे Bash स्क्रिप्टिंग परिचय ट्यूटोरियल से जंप-स्टार्ट प्राप्त करें।
1. सरणी घोषित करना और मान असाइन करना
Bash में, सरणी स्वचालित रूप से बनाई जाती है जब एक वेरिएबल का उपयोग निम्नलिखित प्रारूप में किया जाता है,
name[index]=value
- name सरणी के लिए कोई भी नाम है
- index कोई भी संख्या या अभिव्यक्ति हो सकती है जो शून्य से बड़ी या बराबर संख्या का मूल्यांकन करती है। आप declare -a arrayname का उपयोग करके एक स्पष्ट सरणी घोषित कर सकते हैं।
$ cat arraymanip.sh #! /bin/bash Unix[0]='Debian' Unix[1]='Red hat' Unix[2]='Ubuntu' Unix[3]='Suse' echo ${Unix[1]} $./arraymanip.sh Red hat
सरणी से एक तत्व तक पहुंचने के लिए कर्ली ब्रैकेट्स का उपयोग करें जैसे ${name[index]}।
2. घोषणा के दौरान सरणी आरंभ करना
सरणी के प्रत्येक तत्व को अलग से आरंभ करने के बजाय, आप तत्वों की सूची निर्दिष्ट करके (स्पेस द्वारा अलग किए गए) कर्ली ब्रेसेस के भीतर एक सरणी घोषित और आरंभ कर सकते हैं।
सिंटैक्स: declare -a arrayname=(element1 element2 element3)
यदि तत्वों में व्हाइटस्पेस वर्ण है, तो इसे उद्धरणों में संलग्न करें।
#! /bin/bash $cat arraymanip.sh declare -a Unix=('Debian' 'Red hat' 'Red hat' 'Suse' 'Fedora');
declare -a एक सरणी घोषित करता है और पैरेंथेसिस में सभी तत्व सरणी के तत्व हैं।
3. पूरी Bash सरणी प्रिंट करें
सरणी के सभी तत्वों को प्रिंट करने के विभिन्न तरीके हैं। यदि इंडेक्स नंबर @ या * है, तो सरणी के सभी सदस्य संदर्भित होते हैं। आप bash में लूपिंग स्टेटमेंट्स का उपयोग करके सरणी तत्वों को पार कर सकते हैं और प्रिंट कर सकते हैं।
echo ${Unix[@]} # उपरोक्त echo स्टेटमेंट को arraymanip.sh में जोड़ें #./t.sh Debian Red hat Ubuntu Suse
इंडेक्स नंबर प्रदान किए बिना सरणी के सदस्य वेरिएबल की सामग्री को संदर्भित करना पहले तत्व की सामग्री को संदर्भित करने के समान है, जिसे इंडेक्स नंबर शून्य से संदर्भित किया जाता है।
4. Bash सरणी की लंबाई
हम विशेष पैरामीटर $# का उपयोग करके सरणी की लंबाई प्राप्त कर सकते हैं।
${#arrayname[@]} आपको सरणी की लंबाई देता है।
$ cat arraymanip.sh declare -a Unix=('Debian' 'Red hat' 'Suse' 'Fedora'); echo ${#Unix[@]} #सरणी में तत्वों की संख्या echo ${#Unix} #सरणी के पहले तत्व में वर्णों की संख्या। यानी Debian $./arraymanip.sh 4 6
5. सरणी में nth तत्व की लंबाई
${#arrayname[n]} को सरणी में nth तत्व की लंबाई देनी चाहिए।
$cat arraymanip.sh #! /bin/bash Unix[0]='Debian' Unix[1]='Red hat' Unix[2]='Ubuntu' Unix[3]='Suse' echo ${#Unix[3]} # इंडेक्स 3 पर स्थित तत्व की लंबाई यानी Suse $./arraymanip.sh 4
6. सरणी के लिए ऑफसेट और लंबाई द्वारा निष्कर्षण
निम्नलिखित उदाहरण Unix नामक सरणी से स्थिति 3 से शुरू होने वाले 2 तत्वों को निकालने का तरीका दिखाता है।
$cat arraymanip.sh Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux'); echo ${Unix[@]:3:2} $./arraymanip.sh Suse Fedora
उपरोक्त उदाहरण 3वें इंडेक्स और चौथे इंडेक्स में तत्वों को लौटाता है। इंडेक्स हमेशा शून्य से शुरू होता है।
7. सरणी के विशेष तत्व के लिए ऑफसेट और लंबाई के साथ निष्कर्षण
सरणी तत्व से केवल पहले चार तत्व निकालने के लिए। उदाहरण के लिए, Ubuntu जो सरणी के दूसरे इंडेक्स पर स्थित है, आप सरणी के विशेष तत्व के लिए ऑफसेट और लंबाई का उपयोग कर सकते हैं।
$cat arraymanip.sh #! /bin/bash Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux'); echo ${Unix[2]:0:4} ./arraymanip.sh Ubun
उपरोक्त उदाहरण सरणी के 2वें इंडेक्स तत्व से पहले चार वर्ण निकालता है।
8. सरणी तत्वों में खोज और प्रतिस्थापन
निम्नलिखित उदाहरण, सरणी तत्वों में Ubuntu की खोज करता है, और इसे 'SCO Unix' शब्द से प्रतिस्थापित करता है।
$cat arraymanip.sh #!/bin/bash Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux'); echo ${Unix[@]/Ubuntu/SCO Unix} $./arraymanip.sh Debian Red hat SCO Unix Suse Fedora UTS OpenLinux
इस उदाहरण में, यह 2वें इंडेक्स में तत्व 'Ubuntu' को 'SCO Unix' से प्रतिस्थापित करता है। लेकिन यह उदाहरण सरणी सामग्री को स्थायी रूप से प्रतिस्थापित नहीं करेगा।
9. मौजूदा Bash सरणी में एक तत्व जोड़ें
निम्नलिखित उदाहरण मौजूदा सरणी में एक तत्व जोड़ने का तरीका दिखाता है।
$cat arraymanip.sh Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux'); Unix=("${Unix[@]}" "AIX" "HP-UX") echo ${Unix[7]} $./arraymanip.sh AIX
Unix नामक सरणी में, तत्व 'AIX' और 'HP-UX' क्रमशः 7वें और 8वें इंडेक्स में जोड़े जाते हैं।
10. सरणी से एक तत्व हटाएं
unset का उपयोग सरणी से एक तत्व हटाने के लिए किया जाता है। unset का वही प्रभाव होगा जो किसी तत्व को null असाइन करने का होता है।
$cat arraymanip.sh #!/bin/bash Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux'); unset Unix[3] echo ${Unix[3]}
उपरोक्त स्क्रिप्ट केवल null प्रिंट करेगी जो 3वें इंडेक्स में उपलब्ध मान है। निम्नलिखित उदाहरण सरणी से एक तत्व को पूरी तरह से हटाने के तरीकों में से एक दिखाता है।
$ cat arraymanip.sh Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux'); pos=3 Unix=(${Unix[@]:0:$pos} ${Unix[@]:$(($pos + 1))}) echo ${Unix[@]} $./arraymanip.sh Debian Red hat Ubuntu Fedora UTS OpenLinux
इस उदाहरण में, ${Unix[@]:0:$pos} आपको 0वें इंडेक्स से शुरू होने वाले 3 तत्व देगा यानी 0,1,2 और ${Unix[@]:4} 4वें इंडेक्स से अंतिम इंडेक्स तक के तत्व देगा। और उपरोक्त दोनों आउटपुट को मर्ज करें। यह सरणी से एक तत्व हटाने के समाधान में से एक है।
11. पैटर्न का उपयोग करके Bash सरणी तत्व हटाएं
खोज शर्त में आप पैटर्न दे सकते हैं, और शेष तत्व को दूसरी सरणी में संग्रहीत कर सकते हैं जैसा कि नीचे दिखाया गया है।
$ cat arraymanip.sh #!/bin/bash declare -a Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora'); declare -a patter=( ${Unix[@]/Red*/} ) echo ${patter[@]} $ ./arraymanip.sh Debian Ubuntu Suse Fedora
उपरोक्त उदाहरण Red* पैटर्न वाले तत्वों को हटा देता है।
12. सरणी कॉपी करना
सरणी तत्वों का विस्तार करें और उसे नई सरणी में संग्रहीत करें जैसा कि नीचे दिखाया गया है।
#!/bin/bash Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux'); Linux=("${Unix[@]}") echo ${Linux[@]} $ ./arraymanip.sh Debian Red hat Ubuntu Fedora UTS OpenLinux
13. दो Bash सरणियों का संयोजन
दोनों सरणियों के तत्वों का विस्तार करें और नई सरणी को असाइन करें।
$cat arraymanip.sh #!/bin/bash Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux'); Shell=('bash' 'csh' 'jsh' 'rsh' 'ksh' 'rc' 'tcsh'); UnixShell=("${Unix[@]}" "${Shell[@]}") echo ${UnixShell[@]} echo ${#UnixShell[@]} $ ./arraymanip.sh Debian Red hat Ubuntu Suse Fedora UTS OpenLinux bash csh jsh rsh ksh rc tcsh 14
यह सरणी प्रिंट करता है जिसमें 'Unix' और 'Shell' दोनों सरणी के तत्व हैं, और नई सरणी के तत्वों की संख्या 14 है।
14. पूरी सरणी हटाना
unset का उपयोग पूरी सरणी हटाने के लिए किया जाता है।
$cat arraymanip.sh #!/bin/bash Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux'); Shell=('bash' 'csh' 'jsh' 'rsh' 'ksh' 'rc' 'tcsh'); UnixShell=("${Unix[@]}" "${Shell[@]}") unset UnixShell echo ${#UnixShell[@]} $ ./arraymanip.sh 0
सरणी को अनसेट करने के बाद, इसकी लंबाई ऊपर दिखाए अनुसार शून्य होगी।
15. फ़ाइल की सामग्री को सरणी में लोड करें
आप फ़ाइल की सामग्री को लाइन दर लाइन सरणी में लोड कर सकते हैं।
#उदाहरण फ़ाइल $ cat logfile Welcome to thegeekstuff Linux Unix $ cat loadcontent.sh #!/bin/bash filecontent=( `cat "logfile" `) for t in "${filecontent[@]}" do echo $t done echo "Read file content!" $ ./loadcontent.sh Welcome to thegeekstuff Linux Unix Read file content!
उपरोक्त उदाहरण में, for लूप के माध्यम से सरणी तत्व के प्रत्येक इंडेक्स को प्रिंट किया गया है।
अनुशंसित पठन
Bash 101 Hacks, रमेश नटराजन द्वारा. मैं अपना अधिकांश समय Linux वातावरण में बिताता हूं। इसलिए, स्वाभाविक रूप से मैं Bash कमांड लाइन और शेल स्क्रिप्टिंग का बहुत बड़ा प्रशंसक हूं। 15 साल पहले, जब मैं *nix के विभिन्न फ्लेवर्स पर काम कर रहा था, मैं C शेल और Korn शेल पर बहुत सारा कोड लिखता था। बाद के वर्षों में, जब मैंने Linux पर सिस्टम एडमिनिस्ट्रेटर के रूप में काम करना शुरू किया, तो मैंने Bash शेल स्क्रिप्टिंग का उपयोग करके हर संभव कार्य को स्वचालित कर दिया। अपने Bash अनुभव के आधार पर, मैंने Bash 101 Hacks ईबुक लिखी है जिसमें Bash कमांड लाइन और शेल स्क्रिप्टिंग दोनों पर 101 व्यावहारिक उदाहरण हैं। यदि आप Bash में मास्टर बनने के बारे में सोच रहे हैं, तो अपना उपकार करें और इस पुस्तक को पढ़ें, जो आपके Bash कमांड लाइन और शेल स्क्रिप्टिंग पर नियंत्रण पाने में मदद करेगी।