Ħidma ma Arrays fil-Linux Shell Scripting - Parti 8


Ma nistgħux nimmaġinaw lingwa ta 'programmar mingħajr il-kunċett ta' arrays. Ma jimpurtax kif huma implimentati fost diversi lingwi. Minflok l-arrays jgħinuna fil-konsolidazzjoni tad-dejta, simili jew differenti, taħt isem simboliku wieħed.

Hawnhekk peress li aħna mħassba dwar l-iskripts tal-qoxra, dan l-artikolu jgħinek biex tilgħab ma 'xi skripts tal-qoxra li jagħmlu użu minn dan il-kunċett ta' arrays.

Array Inizjalizzazzjoni u Użu

B'verżjonijiet aktar ġodda ta 'bash, jappoġġja arrays unidimensjonali. Array jista' jiġi ddikjarat b'mod espliċitu mill-declare shell-builtin.

declare -a var  

Iżda mhux meħtieġ li jiġu ddikjarati varjabbli ta' firxa bħal hawn fuq. Nistgħu daħħal elementi individwali għall-array direttament kif ġej.

var[XX]=<value>

fejn ‘XX’ tindika l-indiċi tal-firxa. Biex dereferenza elementi array uża s-sintassi tal-parentesi kaboċċi, i.e.

${var[XX]}

Nota: L-indiċjar tal-array dejjem jibda b'0.

Mod ieħor konvenjenti ta 'inizjalizzazzjoni ta' firxa sħiħa huwa billi tuża l-par ta 'parentesi kif muri hawn taħt.

var=( element1 element2 element3 . . . elementN )

Hemm mod ieħor kif jiġu assenjati valuri lill-arrays. Dan il-mod ta 'inizjalizzazzjoni huwa subkategorija tal-metodu spjegat qabel.

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

Nistgħu wkoll naqraw/tassenjaw valuri lill-array matul il-ħin tal-eżekuzzjoni billi tuża l-readshell-builtin.

read -a array

Issa malli tesegwixxi d-dikjarazzjoni ta 'hawn fuq ġewwa skript, tistenna xi input. Għandna bżonn nipprovdu l-elementi tal-firxa separati mill-ispazju (u mhux ir-ritorn tal-ġarr). Wara li ddaħħal il-valuri agħfas enter biex ittemm.

Biex jaqsmu l-elementi tal-firxa nistgħu nużaw ukoll għal loop.

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

L-iskrittura li ġejja tiġbor fil-qosor il-kontenut ta’ din it-taqsima partikolari.

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

Ħafna mill-operazzjonijiet standard string jaħdmu fuq arrays. Ħares lejn l-iskrittura kampjun li ġejja li timplimenta xi operazzjonijiet fuq arrays (inklużi operazzjonijiet ta 'string).

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

Li ġej huwa l-output prodott fuq l-eżekuzzjoni tal-iskript ta 'hawn fuq.

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

Naħseb li m'hemm l-ebda sinifikat fl-ispjegazzjoni tal-iskrittura ta 'hawn fuq fid-dettall peress li hija spjegata waħedha. Jekk meħtieġ se niddedika parti waħda f'din is-serje esklussivament fuq manipulazzjonijiet tal-kordi.

Is-sostituzzjoni tal-kmand tassenja l-output ta' kmand jew kmandi multipli f'kuntest ieħor. Hawnhekk f'dan il-kuntest ta 'arrays nistgħu daħħal l-output ta' kmandi bħala elementi individwali ta 'arrays. Is-sintassi hija kif ġej.

array=( $(command) )

B'mod awtomatiku, il-kontenuti fl-output tal-kmand separati bi spazji bojod huma pplaggjati f'firxa bħala elementi individwali. L-iskrittura li ġejja telenka l-kontenut ta’ direttorju, li huma fajls b’755 permess.

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

Nistgħu faċilment nirrappreżentaw matriċi 2-dimensjonali bl-użu ta 'array 1-dimensjonali. F'ordni maġġuri ta' ringiela elementi ta' rappreżentazzjoni f'kull ringiela ta' matriċi huma progressivament maħżuna f'indiċi ta' firxa b'mod sekwenzjali. Għal matriċi mXn, formula għall-istess tista 'tinkiteb bħala.

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

Ħares lejn skript kampjun ieħor biex iżżid 2 matriċi u tipprintja l-matriċi li tirriżulta.

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

Anke jekk hemm limitazzjonijiet għall-implimentazzjoni ta 'arrays ġewwa script shell, isir utli f'numru żgħir ta' sitwazzjonijiet, speċjalment meta nittrattaw b'sostituzzjoni tal-kmand. Meta wieħed iħares mil-lat amministrattiv, il-kunċett ta' arrays witta t-triq għall-iżvilupp ta' ħafna skripts ta' sfond fis-sistemi GNU/Linux.