एक सरणी एक चर है जिसमें कई मान एक ही प्रकार के या विभिन्न प्रकार के हो सकते हैं। किसी सरणी के आकार की कोई अधिकतम सीमा नहीं है, न ही कोई आवश्यकता है कि सदस्य चर को अनुक्रमित किया जाए या सन्निहित रूप से असाइन किया जाए। ऐरे इंडेक्स शून्य से शुरू होता है।
इस लेख में, आइए हम बैश में 15 विभिन्न सरणी संचालन की समीक्षा करें।
यह लेख चल रहे बैश ट्यूटोरियल श्रृंखला का हिस्सा है। जो लोग बैश स्क्रिप्टिंग के लिए नए हैं, उनके लिए बैश स्क्रिप्टिंग इंट्रोडक्शन ट्यूटोरियल से तुरंत शुरुआत करें।
बैश में, सरणी स्वचालित रूप से बनाई जाती है जब एक चर का उपयोग प्रारूप में किया जाता है, जैसे,
name[index]=value
- नाम किसी सरणी का कोई भी नाम है
- सूचकांक कोई भी संख्या या व्यंजक हो सकता है जिसका मूल्यांकन शून्य से अधिक या उसके बराबर की संख्या से होना चाहिए। आप घोषणा-ए सरणी नाम का उपयोग करके एक स्पष्ट सरणी घोषित कर सकते हैं।
$ 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]} जैसे कर्ली ब्रैकेट्स का इस्तेमाल करें।
<एच3>2. घोषणा के दौरान एक सरणी प्रारंभ करनाकिसी सरणी के प्रत्येक तत्व को अलग से प्रारंभ करने के बजाय, आप घुंघराले ब्रेसिज़ के साथ तत्वों की सूची (सफेद स्थान से अलग) निर्दिष्ट करके एक सरणी घोषित और प्रारंभ कर सकते हैं।
Syntax: declare -a arrayname=(element1 element2 element3)
यदि तत्वों में रिक्त स्थान वर्ण है, तो उसे उद्धरणों में संलग्न करें।
#! /bin/bash
$cat arraymanip.sh
declare -a Unix=('Debian' 'Red hat' 'Red hat' 'Suse' 'Fedora'); डिक्लेयर -ए एक सरणी घोषित करता है और कोष्ठक में सभी तत्व एक सरणी के तत्व हैं।
<केंद्र> केंद्र> <एच3>3. पूरे बैश ऐरे को प्रिंट करेंसरणी के संपूर्ण तत्वों को मुद्रित करने के विभिन्न तरीके हैं। यदि अनुक्रमणिका संख्या @ या * है, तो किसी सरणी के सभी सदस्यों को संदर्भित किया जाता है। आप बैश में लूपिंग स्टेटमेंट का उपयोग करके सरणी तत्वों के माध्यम से पार कर सकते हैं और इसे प्रिंट कर सकते हैं।
echo ${Unix[@]}
# Add the above echo statement into the arraymanip.sh
#./t.sh
Debian Red hat Ubuntu Suse इंडेक्स नंबर प्रदान किए बिना किसी सरणी के सदस्य चर की सामग्री का जिक्र करना पहले तत्व की सामग्री को संदर्भित करने जैसा ही है, जिसे इंडेक्स नंबर शून्य के साथ संदर्भित किया जाता है।
<एच3>4. बैश ऐरे की लंबाईहम $# नामक विशेष पैरामीटर का उपयोग करके किसी सरणी की लंबाई प्राप्त कर सकते हैं।
${#arrayname[@]} आपको सरणी की लंबाई देता है।
$ cat arraymanip.sh
declare -a Unix=('Debian' 'Red hat' 'Suse' 'Fedora');
echo ${#Unix[@]} #Number of elements in the array
echo ${#Unix} #Number of characters in the first element of the array.i.e Debian
$./arraymanip.sh
4
6 5. किसी सरणी में nवें तत्व की लंबाई
${#arrayname[n]} को किसी सरणी में nवें तत्व की लंबाई देनी चाहिए।
$cat arraymanip.sh
#! /bin/bash
Unix[0]='Debian'
Unix[1]='Red hat'
Unix[2]='Ubuntu'
Unix[3]='Suse'
echo ${#Unix[3]} # length of the element located at index 3 i.e Suse
$./arraymanip.sh
4 <एच3>6. किसी सरणी के लिए ऑफ़सेट और लंबाई द्वारा निष्कर्षण निम्न उदाहरण यूनिक्स नामक एक सरणी से स्थिति 3 से शुरू होने वाले 2 तत्वों को निकालने का तरीका दिखाता है।
$cat arraymanip.sh
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
echo ${Unix[@]:3:2}
$./arraymanip.sh
Suse Fedora उपरोक्त उदाहरण तीसरे सूचकांक और चौथे सूचकांक में तत्वों को लौटाता है। इंडेक्स हमेशा शून्य से शुरू होता है।
<एच3>7. किसी सरणी के किसी विशेष तत्व के लिए ऑफ़सेट और लंबाई के साथ निष्कर्षणकिसी सरणी तत्व से केवल पहले चार तत्व निकालने के लिए। उदाहरण के लिए, उबंटू जो एक सरणी के दूसरे सूचकांक में स्थित है, आप किसी सरणी के किसी विशेष तत्व के लिए ऑफसेट और लंबाई का उपयोग कर सकते हैं।
$cat arraymanip.sh
#! /bin/bash
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
echo ${Unix[2]:0:4}
./arraymanip.sh
Ubun उपरोक्त उदाहरण किसी सरणी के दूसरे अनुक्रमित तत्व से पहले चार वर्णों को निकालता है।
8. सरणी तत्वों में खोजें और बदलें
निम्नलिखित उदाहरण, एक सरणी तत्वों में उबंटू की खोज करता है, और इसे 'एससीओ यूनिक्स' शब्द से बदल देता है।
$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 इस उदाहरण में, यह दूसरे इंडेक्स 'उबंटू' के तत्व को 'एससीओ यूनिक्स' से बदल देता है। लेकिन यह उदाहरण सरणी सामग्री को स्थायी रूप से प्रतिस्थापित नहीं करेगा।
9. मौजूदा बैश ऐरे में एक तत्व जोड़ें
निम्न उदाहरण मौजूदा सरणी में एक तत्व जोड़ने का तरीका दिखाता है।
$cat arraymanip.sh
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
Unix=("${Unix[@]}" "AIX" "HP-UX")
echo ${Unix[7]}
$./arraymanip.sh
AIX यूनिक्स नामक सरणी में, 'AIX' और 'HP-UX' तत्व क्रमशः 7वें और 8वें इंडेक्स में जोड़े जाते हैं।
<एच3>10. किसी ऐरे से कोई तत्व निकालेंकिसी ऐरे से किसी एलीमेंट को निकालने के लिए अनसेट का इस्तेमाल किया जाता है।
$cat arraymanip.sh
#!/bin/bash
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
unset Unix[3]
echo ${Unix[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} चौथे इंडेक्स से एलिमेंट को एलिमेंट देगा। अंतिम सूचकांक। और उपरोक्त दोनों आउटपुट को मर्ज करें। यह किसी ऐरे से किसी एलीमेंट को निकालने का एक समाधान है।
11. पैटर्न का उपयोग करके बैश ऐरे तत्वों को निकालें
खोज स्थिति में आप पैटर्न दे सकते हैं, और शेष तत्व को नीचे दिखाए गए अनुसार किसी अन्य सरणी में संग्रहीत कर सकते हैं।
$ 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 ऊपर दिया गया उदाहरण उन तत्वों को हटा देता है जिनमें पैटर लाल* होता है।
<एच3>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. दो बैश सरणियों का संयोजन
दो सरणियों के तत्वों का विस्तार करें और इसे नए सरणी में असाइन करें।
$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 यह उस सरणी को प्रिंट करता है जिसमें 'यूनिक्स' और 'शेल' दोनों सरणी के तत्व होते हैं, और नए सरणी के तत्वों की संख्या 14 होती है।
<एच3>14. एक संपूर्ण ऐरे को हटानाअनसेट का उपयोग संपूर्ण सरणी को हटाने के लिए किया जाता है।
$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 किसी ऐरे को अनसेट करने के बाद, उसकी लंबाई शून्य होगी जैसा कि ऊपर दिखाया गया है।
<एच3>15. फ़ाइल की सामग्री को एक सरणी में लोड करेंआप फ़ाइल लाइन की सामग्री को एक सरणी में पंक्ति दर पंक्ति लोड कर सकते हैं।
#Example file
$ 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! उपरोक्त उदाहरण में, एक सरणी तत्व की प्रत्येक अनुक्रमणिका लूप के लिए मुद्रित होती है।
अनुशंसित पठन
बैश 101 हैक्स, रमेश नटराजन द्वारा . मैं अपना अधिकांश समय लिनक्स पर्यावरण पर बिताता हूं। इसलिए, स्वाभाविक रूप से मैं बैश कमांड लाइन और शेल स्क्रिप्टिंग का बहुत बड़ा प्रशंसक हूं। 15 साल पहले, जब मैं * निक्स के विभिन्न स्वादों पर काम कर रहा था, मैं सी शेल और कॉर्न शेल पर बहुत सारे कोड लिखता था। बाद के वर्षों में, जब मैंने लिनक्स पर सिस्टम एडमिनिस्ट्रेटर के रूप में काम करना शुरू किया, तो मैंने बैश शेल स्क्रिप्टिंग का उपयोग करके हर संभव कार्य को स्वचालित रूप से स्वचालित कर दिया। अपने बैश अनुभव के आधार पर, मैंने बैश 101 हैक्स ईबुक लिखी है जिसमें बैश कमांड लाइन और शेल स्क्रिप्टिंग दोनों पर 101 व्यावहारिक उदाहरण हैं। यदि आप बैश में महारत हासिल करने के बारे में सोच रहे हैं, तो अपने आप पर एक एहसान करें और इस पुस्तक को पढ़ें, जो आपकी बैश कमांड लाइन और शेल स्क्रिप्टिंग को नियंत्रित करने में आपकी मदद करेगी।