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, nn
faili_arv
on 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äärtuselefaili_arv
muutuv. Niipalju kuifaili_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 kataloogiskausta_arvuni
muutuja, mille väärtuseks on määratud / / dev. Niisiis täidab skript käsu „ls / dev”. - Selle käsu väljund juhitakse
tualett
kä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äärtuselefaili_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.
- $@: 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_var
ja 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.sh
kõ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.