Ħ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.