Yin aiki tare da Arrays a cikin Rubutun Shell na Linux - Sashe na 8


Ba za mu iya tunanin yaren shirye-shirye ba tare da manufar tsararraki ba. Ba kome ba yadda ake aiwatar da su a cikin harsuna daban-daban. Madadin haka tsararrun suna taimaka mana wajen haɓaka bayanai, kamanni ko daban-daban, ƙarƙashin suna ɗaya na alama.

Anan yayin da muke damuwa game da rubutun harsashi, wannan labarin zai taimaka muku wajen wasa tare da wasu rubutun harsashi waɗanda ke amfani da wannan ra'ayi na tsararru.

Ƙaddamarwar Array da Amfani

Tare da sabbin nau'ikan bash, yana goyan bayan tsararru mai girma ɗaya. Za a iya ayyana tsararru a sarari ta bayyana-builtin.

declare -a var  

Amma ba lallai ba ne a ayyana masu canjin jeri kamar yadda ke sama. Za mu iya saka abubuwa ɗaya ɗaya don tsarawa kai tsaye kamar haka.

var[XX]=<value>

inda 'XX' ke nuna ma'anar tsararru. Don abubuwan da ba su dace ba, yi amfani da madaidaicin madaidaicin ma'auni, watau.

${var[XX]}

Lura: Ƙididdigar tsararru koyaushe tana farawa da 0.

Wata hanyar da ta dace ta fara gabaɗayan jeri ita ce ta yin amfani da ɓangarorin biyu kamar yadda aka nuna a ƙasa.

var=( element1 element2 element3 . . . elementN )

Har yanzu akwai wata hanyar sanya ƙima ga tsararru. Wannan hanyar farawa ƙaramin rukuni ne na hanyar da aka bayyana a baya.

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

Hakanan zamu iya karantawa/ sanya dabi'u zuwa tsararru yayin lokacin aiwatarwa ta amfani da readbuiltin harsashi.

read -a array

Yanzu da aiwatar da bayanin da ke sama a cikin rubutun, yana jiran wasu bayanai. Muna buƙatar samar da abubuwan tsararru da sararin samaniya ya raba (kuma ba dawowar karusa ba). Bayan shigar da ƙimar latsa shigar don ƙarewa.

Don ratsa ta cikin abubuwan tsararru za mu iya amfani da madauki.

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

Rubutun mai zuwa yana taƙaita abubuwan da ke cikin wannan sashe na musamman.

#!/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

Yawancin daidaitattun ayyukan kirtani suna aiki akan tsararru. Dubi rubutun samfurin mai zuwa wanda ke aiwatar da wasu ayyuka akan tsararru (ciki har da ayyukan kirtani).

#!/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

Mai zuwa shine fitarwar da aka samar akan aiwatar da rubutun da ke sama.

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

Ina tsammanin babu wani mahimmanci a cikin bayanin rubutun da ke sama dalla-dalla kamar yadda yake bayyana kansa. Idan ya cancanta zan sadaukar da bangare ɗaya a cikin wannan jerin na musamman akan sarrafa igiyoyi.

Musanya umarni yana sanya fitar da umarni ko umarni da yawa zuwa wani mahallin. Anan a cikin wannan mahallin tsararraki za mu iya shigar da fitar da umarni a matsayin daidaikun abubuwa na arrays. Syntax shine kamar haka.

array=( $(command) )

Ta hanyar tsohuwa abubuwan da ke cikin fitarwa na umarni da aka raba su da fararen sarari ana toshe su cikin tsararru azaman abubuwa guda ɗaya. Rubutun mai zuwa yana lissafin abubuwan da ke cikin kundin adireshi, waɗanda fayiloli ne masu izini 755.

#!/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

Za mu iya sauƙin wakiltar matrix mai girma biyu ta amfani da tsararru mai girma 1. A cikin manyan oda abubuwan wakilci a cikin kowane jeri na matrix ana ci gaba da adana su a cikin jeri-jeri ta hanyar jeri. Don matrix mXn, ana iya rubuta dabara don iri ɗaya kamar.

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

Dubi wani rubutun samfurin don ƙara matrices 2 da buga matrix sakamako.

#!/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 

Ko da yake akwai iyakoki don aiwatar da tsararru a cikin rubutun harsashi, yana zama da amfani a cikin ƴan yanayi kaɗan, musamman idan muka yi amfani da canjin umarni. Duba daga mahangar gudanarwa, ra'ayin tsararraki ya buɗe hanya don haɓaka rubutun baya da yawa a cikin tsarin GNU/Linux.