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

अंतिम बैश ऐरे ट्यूटोरियल 15 उदाहरणों के साथ

एक सरणी एक चर है जिसमें कई मान एक ही प्रकार के या विभिन्न प्रकार के हो सकते हैं। किसी सरणी के आकार की कोई अधिकतम सीमा नहीं है, न ही कोई आवश्यकता है कि सदस्य चर को अनुक्रमित किया जाए या सन्निहित रूप से असाइन किया जाए। ऐरे इंडेक्स शून्य से शुरू होता है।

इस लेख में, आइए हम बैश में 15 विभिन्न सरणी संचालन की समीक्षा करें।

यह लेख चल रहे बैश ट्यूटोरियल श्रृंखला का हिस्सा है। जो लोग बैश स्क्रिप्टिंग के लिए नए हैं, उनके लिए बैश स्क्रिप्टिंग इंट्रोडक्शन ट्यूटोरियल से तुरंत शुरुआत करें।

<एच3>1. एक सरणी घोषित करना और मान निर्दिष्ट करना

बैश में, सरणी स्वचालित रूप से बनाई जाती है जब एक चर का उपयोग प्रारूप में किया जाता है, जैसे,

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!

उपरोक्त उदाहरण में, एक सरणी तत्व की प्रत्येक अनुक्रमणिका लूप के लिए मुद्रित होती है।

अनुशंसित पठन

अंतिम बैश ऐरे ट्यूटोरियल 15 उदाहरणों के साथबैश 101 हैक्स, रमेश नटराजन द्वारा . मैं अपना अधिकांश समय लिनक्स पर्यावरण पर बिताता हूं। इसलिए, स्वाभाविक रूप से मैं बैश कमांड लाइन और शेल स्क्रिप्टिंग का बहुत बड़ा प्रशंसक हूं। 15 साल पहले, जब मैं * निक्स के विभिन्न स्वादों पर काम कर रहा था, मैं सी शेल और कॉर्न शेल पर बहुत सारे कोड लिखता था। बाद के वर्षों में, जब मैंने लिनक्स पर सिस्टम एडमिनिस्ट्रेटर के रूप में काम करना शुरू किया, तो मैंने बैश शेल स्क्रिप्टिंग का उपयोग करके हर संभव कार्य को स्वचालित रूप से स्वचालित कर दिया। अपने बैश अनुभव के आधार पर, मैंने बैश 101 हैक्स ईबुक लिखी है जिसमें बैश कमांड लाइन और शेल स्क्रिप्टिंग दोनों पर 101 व्यावहारिक उदाहरण हैं। यदि आप बैश में महारत हासिल करने के बारे में सोच रहे हैं, तो अपने आप पर एक एहसान करें और इस पुस्तक को पढ़ें, जो आपकी बैश कमांड लाइन और शेल स्क्रिप्टिंग को नियंत्रित करने में आपकी मदद करेगी।


  1. रूबी मानचित्र विधि का उपयोग कैसे करें (उदाहरण के साथ)

    मैप एक रूबी विधि है जिसका उपयोग आप ऐरे, हैश और रेंज के साथ कर सकते हैं। मानचित्र का मुख्य उपयोग डेटा को ट्रांसफ़ॉर्म करना है। उदाहरण के लिए : स्ट्रिंग्स की एक सरणी को देखते हुए, आप प्रत्येक स्ट्रिंग पर जा सकते हैं और प्रत्येक वर्ण को अपरकेस बना सकते हैं। या यदि आपके पास User . की सूची है ऑब्जेक्

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

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

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

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