Kuidas töötada muutujatega Bashis

Muutujad on üliolulised, kui soovite kirjutada skripte ja mõista, mida see kood, mille soovite veebis lõigata ja kleepida, teie Linuxi arvutisse teeb. Alustame teid!

Muutujad 101

Muutujad on nimega sümbolid, mis tähistavad kas stringi või arvväärtust. Kui kasutate neid käskudes ja avaldistes, käsitletakse neid nii, nagu oleksite muutuja nime asemel sisestanud neile kuuluva väärtuse.

Muutuja loomiseks sisestage sellele lihtsalt nimi ja väärtus. Teie muutujate nimed peaksid olema kirjeldavad ja tuletama meelde nende väärtust. Muutuja nimi ei saa alata numbriga ega sisaldada tühikuid. Alustada võib aga kriipsuga. Peale selle saate kasutada mis tahes segu suurtest ja väikestest tähtnumbrilistest tähtedest.

Näited

Loome siin viis muutujat. Vorming on kirjutada nimi, võrdusmärk =ja väärtus. Pange tähele, et võrdusmärgi ees ega taga pole tühikut. Muutujale väärtuse andmist nimetatakse sageli määramine muutuja väärtus.

Loome neli stringimuutujat ja ühe numbrilise muutuja,sellel aastal:

mina = Dave
my_boost = Linux
tema = Popeye
his_boost = spinat
see_aasta = 2019

Muutuja väärtuse nägemiseks kasutage nuppu kaja käsk. Muutuja nimele peab eelnema dollarimärk $ alati, kui viidate selle väärtusele, nagu allpool näidatud:

kaja $ minu_nimi
kaja $ my_boost
kaja $ see_aasta

Kasutagem kõiki muutujaid korraga:

kaja "$ my_boost on $ mulle, kuna $ his_boost on $ temale (c) $ this_year"

Muutujate väärtused asendavad nende nimed. Samuti saate muuta muutujate väärtusi. Muutujale uue väärtuse määramiseksmy_boost, kordate lihtsalt seda, mida tegite, kui määrasite selle esimese väärtuse, näiteks:

my_boost = Tequila

Kui käivitate eelmise käsu uuesti, saate nüüd teistsuguse tulemuse:

kaja "$ my_boost on $ mulle, kuna $ his_boost on $ temale (c) $ this_year"

Niisiis, kui muudate muutujate väärtusi, võite kasutada sama käsku, mis viitab samadele muutujatele ja saada erinevaid tulemusi.

Muutujate tsiteerimisest räägime hiljem. Praegu on siin mõned asjad, mida meeles pidada:

  • Muutuja üksikjutumärkides ' käsitletakse sõnasõnalise stringina, mitte muutujana.
  • Muutujad jutumärkides " käsitletakse muutujatena.
  • Muutuja väärtuse saamiseks peate esitama dollari märgi $.
  • Muutuja ilma dollari märgita $ annab ainult muutuja nime.

Samuti saate luua muutuja, mis võtab selle väärtuse olemasolevast muutujast või muutujate arvust. Järgmine käsk määratleb uue muutuja nimega jooma_aasta_aasta, ja määrab sellele väärtuse ühendatud väärtused my_boost ja sellel aastal muutujad:

drink_of-the_Year = "$ my_boost $ this_year"
aasta kajajook

Kuidas kasutada muutujaid skriptides

Skriptid oleksid ilma muutujateta täiesti takerdunud. Muutujad pakuvad paindlikkust, mis muudab skripti pigem üldiseks kui konkreetseks lahenduseks. Erinevuse illustreerimiseks on siin skript, mis loendab failid failis / dev kataloogi.

Sisestage see tekstifaili ja seejärel salvestage see nimega fcnt.sh (failide arvu jaoks):

#! / bin / bash folder_to_count = / dev file_count = $ (ls $ folder_to_count | wc -l) echo $ file_count failid kaustas $ folder_to_count

Enne skripti käivitamist peate selle tegema käivitatavaks, nagu allpool näidatud:

chmod + x fcnt.sh

Skripti käitamiseks tippige järgmine:

./fcnt.sh

See prindib failide arvu / dev kataloogi. See toimib järgmiselt.

  • Muutuja nimega kausta_arvuni on määratletud ja see on määratud hoidma stringi "/ dev".
  • Teine muutuja, nnfaili_arvon määratletud. See muutuja võtab oma väärtuse käsu asendamisest. See on sulgude vaheline käsulause $( ). Pange tähele, et seal on dollari märk $ enne esimest sulgudesse. See konstrukt $( ) hindab sulgudes olevaid käske ja tagastab seejärel nende lõpliku väärtuse. Selles näites on see väärtus määratud väärtusele faili_arv muutuv. Niipalju kui faili_arv muutuja on seotud väärtusega; see ei ole seotud sellega, kuidas väärtus saadi.
  • Käsu asenduses hinnatud käsk täidab ls failide loend kataloogis kausta_arvuni muutuja, mille väärtuseks on määratud / / dev. Niisiis täidab skript käsu „ls / dev”.
  • Selle käsu väljund juhitakse tualettkäsk. The -L (read count) valiku põhjusedtualett loendada ridade arvu väljundisls käsk. Kuna iga fail on loetletud eraldi real, on see failide ja alamkataloogide arv kataloogis “/ dev”. See väärtus määratakse väärtusele faili_arv muutuv.
  • Viimane rida kasutab tulemuse väljastamiseks kaja.

Kuid see töötab ainult kataloogis “/ dev”. Kuidas saame skripti suvalise kataloogiga tööle panna? Selleks on vaja ainult ühte väikest muudatust.

Kuidas käsurea parameetreid skriptides kasutada

Paljud käsud, näiteks ls ja tualett, võtke käsurea parameetrid. Need annavad käsule teavet, nii et see teab, mida soovite, et see teeks. Kui sa tahadls kodukataloogis töötamiseks ja peidetud failide kuvamiseks võite kasutada järgmist käsku, kus tilde ~ ja -a (kõik) valik on käsurea parameetrid:

ls ~ -a

Meie skriptid aktsepteerivad käsurea parameetreid. Neile viidatakse kui $1 esimese parameetri jaoks $2 teiseks ja nii edasi kuni $9 üheksanda parameetri jaoks. (Tegelikult on olemas $0, kuid see on reserveeritud skripti alati hoidmiseks.)

Skriptis saate viidata käsurea parameetritele nagu tavalistele muutujatele. Muutke oma skripti, nagu allpool näidatud, ja salvestage see uue nimegafcnt2.sh:

#! / bin / bash folder_to_count = $ 1 file_count = $ (ls $ folder_to_count | wc -l) echo $ file_count failid kaustas $ folder_to_count

Seekord on kausta_arvuni muutujale määratakse esimese käsurea parameetri väärtus, $1.

Ülejäänud skript töötab täpselt nii nagu varem. Konkreetse lahenduse asemel on teie skript nüüd üldine. Saate seda kasutada mis tahes kataloogis, kuna see pole kodeeritud töötama ainult üksusega / / dev.

Skripti käivitatavaks muutmine toimub järgmiselt.

chmod + x fcnt2.sh

Proovige nüüd mõne kataloogiga. Kõigepealt saate teha "/ dev", et veenduda, et saate sama tulemuse nagu varem. Sisestage järgmine:

./fnct2.sh / dev
./fnct2.sh / jne
./fnct2.sh / bin

Saate kataloogi “/ dev” jaoks sama tulemuse (207 faili) kui varem. See on julgustav ja kõigi teiste käsurea parameetrite kohta saate kataloogispetsiifilised tulemused.

Skripti lühendamiseks võite muutujast loobuda,kausta_arvuni, kokku ja lihtsalt viide $1 järgmiselt:

#! / bin / bash file_count = $ (ls $ 1 wc -l) kaja faili faili fail $ 1

Spetsiaalsete muutujatega töötamine

Me mainisime $0, mis määratakse alati skripti failinimeks. See võimaldab teil skripti abil teha näiteks nime õigesti välja printida, isegi kui see on ümber nimetatud. See on kasulik logimise olukordades, kus soovite teada kirje lisanud protsessi nime.

Järgmised on muud eelseadistatud muutujad:

  • $#: Mitu käsurea parameetrit skriptile edastati.
  • [email protected]: Kõik käsurea parameetrid, mis on skriptile edastatud.
  • $?: Viimati käivitatud protsessi väljumisolek.
  • $$: Praeguse skripti protsessi ID (PID).
  • $ USER: Skripti käivitava kasutaja kasutajanimi.
  • $ HOSTNAME: Skripti käitava arvuti hostinimi.
  • SEKUNDID: Sekundite arv, mille jooksul skript on töötanud.
  • $ RANDOM: Tagastab juhusliku arvu.
  • $ LINENO: Tagastab skripti praeguse rea numbri.

Kas soovite neid kõiki ühes skriptis näha? Sa saad! Salvestage järgmine tekstifailina nimegaeriline.sh:

#! / bin / bash echo "Käsurea parameetreid oli $ #" echo "Need on: $ @" echo "Parameeter 1 on: $ 1" echo "Skripti nimi on: $ 0" # mis tahes vana protsess, et saaksime aru väljumisolekul pwd kaja "pwd tagastas $?" kaja "Sellel skriptil on protsessi ID $$" kaja "Skripti käivitas $ USER" kaja "See töötab saidil $ HOSTNAME" sleep 3 kaja "See on töötanud $ SECONDS sekundit" kaja "Juhuslik number: $ RANDOM" echo "See on skripti rida number $ LINENO"

Selle käivitatavaks muutmiseks tippige järgmine:

chmod + x special.sh

Nüüd saate seda käivitada hulga erinevate käsurea parameetritega, nagu allpool näidatud.

Keskkonna muutujad

Bash kasutab keskkonnamuutujaid, et määratleda ja salvestada selle käivitamisel loodava keskkonna omadused. Nendele Bashile hõlpsasti juurde pääsevatele andmetele, nagu teie kasutajanimi, lokaat, ajaloofailis olevate käskude arv, teie vaikiredaktor ja palju muud.

Bashi seansi aktiivsete keskkonnamuutujate nägemiseks kasutage seda käsku:

env | vähem

Kui loendit sirvida, võite leida mõne, mida oleks kasulik oma skriptides viidata.

Muutujate eksportimine

Kui skript töötab, on see oma protsessis ja selle kasutatavaid muutujaid ei saa väljaspool seda protsessi näha. Kui soovite muutujat teise skripti käivitada, peate selle muutuja eksportima. Näitame teile, kuidas seda teha kahe skripti abil.

Kõigepealt salvestage failinimega järgmised andmedscript_one.sh:

#! / bin / bash first_var = alfa second_var = bravo # kontrollige nende väärtusi kaja "$ 0: first_var = $ first_var, second_var = $ second_var" eksport first_var export second_var ./script_two.sh # kontrollige nende väärtusi uuesti echo "$ 0: first_var = $ first_var, second_var = $ second_var "

See loob kaks muutujat, esimene_var ja teine_varja see määrab mõned väärtused. See prindib need terminaliaknasse, eksportib muutujad ja kutsub script_two.sh. Millal script_two.sh lõpeb ja protsessivoog naaseb selle skripti juurde, prindib muutujad uuesti terminaliaknasse. Seejärel näete, kas need muutusid.

Teine skript, mida kasutame, on script_two.sh. See on skript, misscript_one.shkõned. Sisestage järgmine:

#! / bin / bash # kontrollige nende väärtusi echo "$ 0: first_var = $ first_var, second_var = $ second_var" # sea uued väärtused first_var = charlie second_var = delta # kontrollige nende väärtusi uuesti kaja "$ 0: first_var = $ first_var, second_var = $ second_var "

See teine ​​skript prindib kahe muutuja väärtused, määrab neile uued väärtused ja prindib need siis uuesti.

Nende skriptide käivitamiseks peate nende käivitatavaks muutmiseks sisestama järgmised andmed:

chmod + x script_one.sh chmod + x script_two.sh

Ja nüüd sisestage käivitamiseks järgmine script_one.sh:

./script_one.sh

Seda väljund meile ütleb:

  • script_one.sh prindib muutujate väärtused, milleks on alfa ja bravo.
  • script_two.sh prindib muutujate (alfa ja bravo) väärtused sellisel kujul, nagu need said.
  • script_two.sh muudab need charlieks ja deltaks.
  • script_one.sh prindib muutujate väärtused, mis on endiselt alfa- ja bravo-tähed.

Mis juhtub teises skriptis, jääb teise skripti. See on nagu muutujate koopiad, mis saadetakse teise skripti, kuid need loobutakse, kui see skript väljub. Esimese skripti algseid muutujaid ei muuda miski, mis juhtub nende teises eksemplaris.

Kuidas tsiteerida muutujaid

Võib-olla olete märganud, et kui skriptid viitavad muutujatele, on need jutumärkides ". See võimaldab muutujatele õigesti viidata, nii et nende väärtusi kasutatakse rea käivitamisel skriptis.

Kui muutujale omistatud väärtus sisaldab tühikuid, peavad need muutujale määramisel olema jutumärkides. Seda seetõttu, et vaikimisi kasutab Bash eraldajana tühikut.

Siin on näide:

site_name = näpunäited

Bash näeb tühiku „Geek” ees olevat tähist uue käsu käivitamise kohta. See teatab, et sellist käsku pole, ja loobub reast. kaja näitab meile, et saidi_nimi muutuja ei sisalda midagi - isegi mitte juhiseid.

Proovige seda uuesti jutumärkidega ümber väärtuse, nagu allpool näidatud:

site_name = "Kuidas leida geeki"

Seekord tuvastatakse see ühe väärtusena ja määratakse väärtusele õigesti saidi_nimi muutuv.

kaja on su sõber

See võib võtta mõnda aega, et harjuda käskude asendamise, muutujate tsiteerimise ja mäletamisega, millal dollarimärk lisada.

Enne kui vajutate sisestusklahvi Enter ja käivitate rea Bashi käske, proovige seda kaja selle ees. Nii saate veenduda, et juhtub see, mida soovite. Samuti saate tabada kõik süntaksis tehtud vead.