Bash scenarijus – masyvas
Masyvai yra svarbios sąvokos programuojant ar scenarijuose. Masyvai leidžia saugoti ir gauti elementus sąrašo formoje, kuri gali būti naudojama tam tikroms užduotims atlikti. Bash sistemoje taip pat turime masyvus, kurie padeda mums komandinėje eilutėje kurti scenarijus, skirtus duomenų saugojimui sąrašo formatu. Šiame straipsnyje mes suprasime bash scenarijų masyvų pagrindus.
Masyvų kūrimas
Norėdami sukurti pagrindinį masyvą bash scenarijuje, galime naudoti deklaravimą -a komandą, po kurios nurodomas masyvo kintamojo, kurį norite pateikti, pavadinimas.
#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball )
ARBA
#!/bin/usr/env bash sport[0]=football sport[1]=cricket sport[2]=hockey sport[3]=basketball
Elementų reikšmė gali būti bet koks sveikasis skaičius, eilutės arba bet kokia kita duomenų forma, kaip pageidaujama. Matome, kad masyvas deklaruojamas bash scenarijuje dviem būdais, pirmasis atrodo patogesnis ir ne toks sudėtingas deklaruoti. Jei norime deklaruoti masyvą vienu ypu, pirmasis yra optimalus pasirinkimas, tačiau jei elementus reikia pridėti bitais ir gabalais, pastarasis yra geras pasirinkimas.
Masyvų spausdinimas
Deklaravus masyvą, jei norime rodyti visus masyvo elementus, galime naudoti simbolį @.
#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) echo '${sport[@]}'
echo '${array_name[@]}' Mes naudojame [@] kaip masyvo rodyklę, kad būtų rodomi visi elementai. Visi elementai spausdinami tarpais atskirti, kabutės aplink kintamąjį išplečiamos ir spausdinami visi masyvo elementai.
Kartojimas per masyvą
Norėdami kartoti masyvo vieną elementą vienu metu, galime naudoti kilpas ir atlikti bet kokias operacijas jame.
#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) for i in ${nums[@]} do echo -e '$i
' done
Kaip matome, mes panaudojome for kilpą, norėdami po vieną spausdinti elementą iš masyvo. Ankstesnėje dalyje naudojome triuką, kaip gauti visus masyvo elementus ir kartoti jį po vieną „for“ cikle. ${array_name[@]} išsiplečia į visus masyvo elementus, o ciklas for kartoja juos po vieną su iteratoriumi pavyzdyje tai yra kintamasis i , For ciklo korpuse spausdiname kintamasis/iteratorius i ir taip kartoti per masyvą.
Gaukite elementų skaičių masyve
Norėdami gauti masyvo elementų skaičių, galime naudoti # operatorių prieš masyvo pavadinimą s langelyje ${array_name[@]}.
#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) echo '${#sport[@]}'
Taigi mes grąžiname masyvo dydį naudodami komandą ${#sport[@]}, # naudojamas norint gauti šalia esančio kintamojo dydį, naudojant dvigubas kabutes įvertinama komandos reikšmė ir gauname norimą elementų skaičių masyve.
Elemento įterpimas į masyvą
Norėdami įterpti elementą yra gana paprasta, turime nustatyti atitinkamą elemento indeksą, po kurio nurodoma elemento, kurį norėjote pateikti, vertė.
#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) echo '${sport[@]}' sport[4]='dodgeball' sport[2]='golf' echo '${sport[@]}'
Į masyvą įtraukėme 5-ąjį elementą (4-ąjį indeksą), taip pat pakeitėme / redagavome 3-ąjį masyvo elementą (2-ąjį indeksą). The masyvo pavadinimas[index]=reikšmė yra visos gudrybės pridėti, modifikuoti ar inicijuoti masyvo elementus.
Taip pat galime įtraukti elementus į masyvą naudodami += operatorių.
#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) echo '${sport[@]}' sport+=('golf' 'baseball') echo '${sport[@]}' echo 'Size : ${#sport[@]}'
Kaip matyti pavyzdyje, į masyvą galime įtraukti kelis elementus su minimaliu kodu. Mes naudojame masyvo_pavadinimas+=(elementai), norėdami pridėti elementus prie masyvo.
Elemento ištrynimas iš masyvo
Norėdami ištrinti elementą iš masyvo, galime naudoti komandą unset. Komanda paima kintamojo pavadinimą mūsų atveju masyvo pavadinimą ir to elemento indeksą. Indeksas taip pat gali būti santykinis, t. y. -1, nurodantis paskutinį elementą, o nuo -2 iki antrojo paskutinio ir pan.
#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) unset sport[1] echo '${sport[@]}' echo '${#sport[@]}'
Kaip matome, nenustatytas masyvovardas[indeksas] iš masyvo ištrins indekso elementą. Be to, masyvo dydis sumažintas iki 3 nuo 4, o tai rodo, kad elementas visiškai pašalintas, o ne tik pakeistas tarpais.
Naudojant santykinius indeksus
Jei naudojame indeksus, pvz., -1, -2 ir tt, elementai nurodomi nuo paskutinio elemento, todėl galime juos ištrinti arba modifikuoti santykine tvarka iš galo.
#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) unset sport[-3] echo '${sport[@]}'
Kaip matome, indeksas 1 taip pat nurodomas kaip -3 iš galo, todėl tampa palyginti lengviau nurodyti tam tikrus didelio masyvo elementus.
Sujunkite masyvą
Mes galime sujungti (išimti gėrimą) masyvą, kad priskirtume arba atsispausdintume jį kitam kintamajam / masyvei.
#!/bin/usr/env bash declare -a sport sport+=('football' 'cricket' 'hockey' 'basketball') sport+=('golf' 'baseball') echo 'sport = ${sport[@]}' arr='${sport[@]:1:3}' echo 'arr = ${arr[@]}'
Iš sporto masyvo išėmėme dalį, t. y. elementą tarp indeksų 1 ir 3 imtinai, ir priskyrėme jį arr kintamajam, kuris taip pat yra masyvas. @ operatorius gauna visus elementus iš masyvo ir tada galime sujungti masyvą tarp indeksų 1 ir 3, kad elementai būtų 1, 2 ir 3 (kriketas, ledo ritulys ir beisbolas) iš sporto masyvo.
Apibrėžkite statinį masyvą ir atspausdinkite masyvo elementus
#To declare static Array programmingArray=(Java Python Ruby Perl) #In below 2 ways we can print the elements of the static array echo 'Way 1 of printing static values by using [@]:0 - ' ${programmingarray[@]$ echo 'Way 2 of printing static values by using [*]:0 - ' ${programmingarray[*]$
Statinio masyvo elementus galime spausdinti dviem būdais
Programos vykdymas
sh So, we can give as sh arraycheck2.sh # arraycheck2.sh is the name of the script file here
Komandinės eilutės argumentų perdavimas scenarijaus faile
#All the array elements are stored in an array called programmingArray programmingArray=('$@') #Index values start from 0 #If we do not specify the index, it will take up the size of first index value echo 'Size of programmingArray at 0th location..:' $(#programmingArray[0]} echo 'Size of programmingArray at 1st location..:' $(#programmingArray[1]}
Aukščiau pateiktas scenarijus gali būti vykdomas kaip
# Čia Java, Python ir Ruby yra komandinės eilutės argumentai
sh arrayCheck.sh Java Python Ruby
Scenarijaus vykdymo žingsniai:
programingArray=(Java Python Ruby)
#Java bus 0 indekse, jo dydį galima apskaičiuoti taip
${#programmingArray[0]}
Panašiai Python bus 1-ame indekse, jo dydį galima apskaičiuoti taip
${#programmingArray[1]}
Išvestis:
Masyvo reikšmių kartojimas naudojant for ciklus
$@ pateiks visas reikšmes, kurios buvo perduotos per komandinės eilutės argumentus, ir bus saugomos masyve.
Jis gali būti kartojamas naudojant for kilpą
declare -a programmingArray=('$@') i=0 for programming in '$@' do echo 'Array value at index ' $i ' : ' $programming i=$((i+1)); done
Išvestis:
Greitai pažvelkime į tai, ką reiškia kiekvienas simbolis
| Sintaksė | Išvestis |
| arr=() | arr[0]=3 Perrašyti 1 elementą arr+=(4) Pridėti reikšmę (-es) str=$(ls) Išsaugokite ls išvestį kaip eilutę arr=( $(ls) ) Išsaugokite ls išvestį kaip failų masyvą ${arr[@]:s:n} Gauti n elementų, pradedant nuo indekso |
| #Galime pateikti vertybių rinkinį kaip šitas arr = (vienas du trys) | Norėdami inicijuoti masyvą |
| ${arr[0]} | Norėdami gauti pirmąjį elementą. Indeksas visada prasideda nuo 0 |
| ${arr[@]} | Norėdami gauti visus elementus ir tada galime kartoti ciklu |
| ${!arr[@]} | Norėdami gauti vien masyvo indeksus |
| ${#arr[@]} | Norėdami apskaičiuoti masyvo dydį |
| arr[2]=3 | Norėdami perrašyti 3 elementą, turime jį naudoti tokiu būdu. Kadangi indeksas prasideda nuo 0, arr[2] yra teisingas. |
| arr+=(40) | Norėdami pridėti reikšmę (-es), galime naudoti +, tada priskirti su =, todėl naudojamas +=. |
| str=$(ls) | Norėdami išsaugoti ls komandos išvestį kaip eilutę (šiam išėjimui parodytas 4 pavyzdys) |
| arr=( $(ls) ) | Norėdami išsaugoti ls išvestį kaip failų masyvą (šios išvesties 5 pavyzdys parodytas) |
| ${arr[@]:s:n} | Norėdami gauti n elementų, prasidedančių indeksu s |