লিনাক্স শেল স্ক্রিপ্টিং এ অ্যারেগুলির সাথে কাজ করা - পার্ট 8


অ্যারের ধারণা ছাড়া আমরা কোনও প্রোগ্রামিং ভাষা কল্পনা করতে পারি না। এগুলি কীভাবে বিভিন্ন ভাষার মধ্যে প্রয়োগ করা হয় তা বিবেচ্য নয়। পরিবর্তে অ্যারেগুলি একটি প্রতীকী নাম অনুসারে সমান বা পৃথক, ডেটা একত্রিত করতে আমাদের সহায়তা করে।

এখানে যেমন আমরা শেল স্ক্রিপ্টিং সম্পর্কে উদ্বিগ্ন, এই নিবন্ধটি আপনাকে শেল স্ক্রিপ্টগুলির সাথে চারপাশে খেলতে সহায়তা করবে যা অ্যারের এই ধারণাটি ব্যবহার করে।

অ্যারে ইনিশিয়ালাইজেশন এবং ব্যবহার

ব্যাশের নতুন সংস্করণ সহ এটি এক-মাত্রিক অ্যারে সমর্থন করে। ঘোষণা শেল-বিল্টিন দ্বারা একটি অ্যারে স্পষ্টভাবে ঘোষণা করা যেতে পারে।

declare -a var  

তবে উপরে হিসাবে অ্যারে ভেরিয়েবলগুলি ঘোষণার প্রয়োজন নেই। নিম্নরূপে সরাসরি অ্যারেতে আমরা পৃথক উপাদান সন্নিবেশ করতে পারি।

var[XX]=<value>

যেখানে ‘এক্সএক্স’ অ্যারে সূচি বোঝায়। অ্যারে উপাদানগুলি ডিফারেন্স করার জন্য কোঁকড়ানো বন্ধনী সিনট্যাক্স ব্যবহার করে, যেমন।

${var[XX]}

দ্রষ্টব্য: অ্যারে সূচি সর্বদা 0 দিয়ে শুরু হয়।

পুরো অ্যারেটিকে আরম্ভ করার আর একটি সুবিধাজনক উপায় হ'ল নীচে দেখানো মত বন্ধনীর জুড়িটি ব্যবহার করে।

var=( element1 element2 element3 . . . elementN )

অ্যারেগুলিকে মান নির্ধারণের আরও একটি উপায় আছে। প্রারম্ভিককরণের এই উপায়টি পূর্বের বর্ণিত পদ্ধতির একটি উপ-বিভাগ।

array=( [XX]=<value> [XX]=<value> . . . )

আমরা পড়ুন শেল-বিল্টিন ব্যবহার করে কার্যকর করার সময় অ্যারে মানগুলি পড়তে/নির্ধারণ করতে পারি।

read -a array

এখন স্ক্রিপ্টের মধ্যে উপরের বিবৃতিটি কার্যকর করার পরে এটি কিছু ইনপুটটির জন্য অপেক্ষা করে। আমাদের স্পেস দ্বারা বিভাজিত অ্যারে উপাদানগুলি সরবরাহ করতে হবে (এবং ক্যারেজ রিটার্ন নয়)। মানগুলি প্রবেশ করার পরে সমাপ্তির জন্য এন্টার টিপুন।

অ্যারে উপাদানগুলির মধ্য দিয়ে যেতে আমরা লুপের জন্যও ব্যবহার করতে পারি।

for i in “${array[@]}”
do
	#access each element as $i. . .
done 

নিম্নলিখিত স্ক্রিপ্টটি এই বিশেষ বিভাগের সামগ্রীর সংক্ষিপ্তসার করে।

#!/bin/bash 

array1[0]=one 
array1[1]=1 
echo ${array1[0]} 
echo ${array1[1]} 

array2=( one two three ) 
echo ${array2[0]} 
echo ${array2[2]} 

array3=( [9]=nine [11]=11 ) 
echo ${array3[9]} 
echo ${array3[11]} 

read -a array4 
for i in "${array4[@]}" 
do 
	echo $i 
done 

exit 0

স্ট্যান্ডার্ড স্ট্রিং অপারেশনগুলির অনেকগুলি অ্যারেগুলিতে কাজ করে। নিম্নলিখিত নমুনা স্ক্রিপ্টটি দেখুন যা অ্যারেতে কিছু ক্রিয়াকলাপ প্রয়োগ করে (স্ট্রিং অপারেশন সহ)।

#!/bin/bash 

array=( apple bat cat dog elephant frog ) 

#print first element 
echo ${array[0]} 
echo ${array:0} 

#display all elements 
echo ${array[@]} 
echo ${array[@]:0} 

#display all elements except first one 
echo ${array[@]:1} 

#display elements in a range 
echo ${array[@]:1:4} 

#length of first element 
echo ${#array[0]} 
echo ${#array} 

#number of elements 
echo ${#array[*]} 
echo ${#array[@]} 

#replacing substring 
echo ${array[@]//a/A} 

exit 0

নিম্নলিখিতটি উপরের স্ক্রিপ্টটি সম্পাদন করে আউটপুট উত্পাদিত হয়।

apple 
apple 
apple bat cat dog elephant frog 
apple bat cat dog elephant frog 
bat cat dog elephant frog 
bat cat dog elephant 
5 
5 
6 
6 
Apple bAt cAt dog elephAnt frog

আমি মনে করি উপরোক্ত লিপিটি বিশদভাবে ব্যাখ্যা করার কোনও তাত্পর্য নেই কারণ এটি স্ব-বর্ণনামূলক। প্রয়োজনে আমি এই সিরিজের একটি অংশ কেবল স্ট্রিং ম্যানিপুলেশনে উত্সর্গ করব will

কমান্ড প্রতিস্থাপন একটি কমান্ড বা একাধিক কমান্ডের আউটপুট অন্য প্রসঙ্গে নির্ধারিত করে। অ্যারেগুলির এই প্রসঙ্গে আমরা অ্যারেগুলির পৃথক উপাদান হিসাবে কমান্ডের আউটপুট সন্নিবেশ করতে পারি। সিনট্যাক্সটি নিম্নরূপ।

array=( $(command) )

ডিফল্টরূপে সাদা স্পেস দ্বারা পৃথক কমান্ডের আউটপুটে থাকা সামগ্রীগুলি পৃথক উপাদান হিসাবে অ্যারেতে প্লাগ করা হয়। নিম্নলিখিত স্ক্রিপ্ট একটি ডিরেক্টরিতে লিখিত বিষয়বস্তু তালিকাবদ্ধ করে, যা 755 অনুমতিযুক্ত ফাইল with

#!/bin/bash 

ERR=27 
EXT=0 

if [ $# -ne 1 ]; then 
	echo "Usage: $0 <path>" 
	exit $ERR 
fi 

if [ ! -d $1 ]; then 
	echo "Directory $1 doesn't exists" 
	exit $ERR 
fi 

temp=( $(find $1 -maxdepth 1 -type f) ) 

for i in "${temp[@]}" 
do 
	perm=$(ls -l $i) 
	if [ `expr ${perm:0:10} : "-rwxr-xr-x"` -eq 10 ]; then 
		echo ${i##*/} 
	fi 
done 

exit $EXT

আমরা 1-মাত্রিক অ্যারে ব্যবহার করে সহজেই 2-মাত্রিক ম্যাট্রিক্স উপস্থাপন করতে পারি। সারি প্রধান ক্রমে ম্যাট্রিক্সের প্রতিটি সারিতে প্রতিনিধিত্বকারী উপাদানগুলি ক্রমানুসারে অ্যারে সূচকগুলিতে ক্রমান্বয়ে সংরক্ষণ করা হয়। একটি এমএক্সএন ম্যাট্রিক্সের জন্য, একই সূত্র হিসাবে লেখা যেতে পারে।

matrix[i][j]=array[n*i+j]

2 ম্যাট্রিক যোগ করতে এবং ফলাফল ম্যাট্রিক্স মুদ্রণের জন্য অন্য নমুনা স্ক্রিপ্টটি দেখুন।

#!/bin/bash 

read -p "Enter the matrix order [mxn] : " t 
m=${t:0:1} 
n=${t:2:1} 

echo "Enter the elements for first matrix" 
for i in `seq 0 $(($m-1))` 
do 
	for j in `seq 0 $(($n-1))` 
	do 
		read x[$(($n*$i+$j))] 
	done 
done 

echo "Enter the elements for second matrix" 
for i in `seq 0 $(($m-1))` 
do 
	for j in `seq 0 $(($n-1))` 
	do 
		read y[$(($n*$i+$j))] 
		z[$(($n*$i+$j))]=$((${x[$(($n*$i+$j))]}+${y[$(($n*$i+$j))]})) 
	done 
done 

echo "Matrix after addition is" 
for i in `seq 0 $(($m-1))` 
do 
	for j in `seq 0 $(($n-1))` 
	do 
		echo -ne "${z[$(($n*$i+$j))]}\t" 
	done 
	echo -e "\n" 
done 

exit 0 

শেল স্ক্রিপ্টিংয়ের ভিতরে অ্যারে প্রয়োগের সীমাবদ্ধতা থাকা সত্ত্বেও, এটি মুষ্টিমেয় পরিস্থিতিতে কার্যকর হয়, বিশেষত যখন আমরা কমান্ড প্রতিস্থাপনের সাথে পরিচালনা করি। প্রশাসনিক দৃষ্টিকোণ থেকে দেখে অ্যারে ধারণাটি জিএনইউ/লিনাক্স সিস্টেমগুলিতে অনেকগুলি পটভূমি স্ক্রিপ্টগুলির বিকাশের পথ প্রশস্ত করেছে।