Aloittelijan opas BASH - edellytykset ja muuttujat

esittely

Tervetuloa "aloittelijan oppaan BASH" kolmanteen osaan. Jos olet menettänyt edelliset kaksi artikkelia, luultavasti haluat tietää, mikä tekee oppaasta erilainen kuin muut BASH-komentosarjat.

Tämä opas kirjoitetaan BASH: n täydelliselle aloittelijalle ja lukijaksi, jonka opit oppimalla. Vaikka olen aloittelija BASH: lle, olen peräisin ohjelmistokehityksen taustasta, vaikka useimmat kirjoittamani tavarat ovat olleet Windows-alustalle.

Näet kaksi ensimmäistä oppaita käymällä:

Jos olet uusi BASH-ohjelmointi, suosittelen lukemaan kaksi ensimmäistä ohjetta ennen kuin jatkat tätä.

Tässä oppaassa korostan ehdollisten lausumien käyttöä testaamaan käyttäjän syötteitä ja hallitsemaan, miten komentosarja toimii.

Asenna rsstail

Tämän ohjeen noudattamiseksi sinun on asennettava rsstail-komentorivisovellus, jota käytetään lukemaan RSS-syötteitä .

Jos käytössäsi on Debian / Ubuntu / Mint- pohjainen jakelu, kirjoita seuraava:

sudo apt-get asenna rsstail

Kirjoita Fedora / CentOS jne. Seuraavat tiedot:

yum asentaa rsstail

Kirjoita openSUSE: lle seuraava:

zypper asentaa rsstail

IF-lausunto

Avaa päätelaite ja luo tiedosto nimeltä rssget.sh kirjoittamalla seuraavat:

sudo nano rssget.sh

Syötä nano-editorissa seuraava teksti:

#! / bin / bash
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;

Tallenna tiedosto painamalla CTRL ja O ja poistu sitten painamalla CTRL ja X.

Suorita komentosarja kirjoittamalla seuraavat:

sh rssget.sh

Komentosarja palauttaa luettelon otsikoista linux.about.com RSS-syötteestä.

Se ei ole liian hyödyllinen käsikirjoitus, koska se vain hakee otsikot yhdestä RSS-syötteestä, mutta siinä ei tarvitse muistaa polkua Linux.about.com RSS-syötteeseen.

Avaa rssget.sh-käsikirjoitus nano uudelleen ja muokkaa tiedostoa näyttämään seuraavasti:

#! / bin / bash

jos [$ 1 = "verbose"]
sitten
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
fi

Suorita komentosarja uudelleen kirjoittamalla seuraavat:

sh rssget.sh verbose

Tällä kertaa RSS-syötteestä tulee otsikko, linkki ja kuvaus.

Tarkastellaan käsikirjoitusta yksityiskohtaisesti:

#! / Bin / bash ilmestyy jokaiselle käsikirjoitukselle, jonka kirjoitamme. Seuraava rivi tarkastelee periaatteessa käyttäjän tarjoamaa ensimmäistä syöttöparametria ja vertaa sitä sanaan "verbose". Jos tuloparametri ja sana "verbose" vastaavat viivoja sitten ja fi on suoritettu.

Edellä oleva käsikirjoitus on ilmeisesti virheellinen. Mitä tapahtuu, jos et anna syöttöparametria lainkaan? Vastaus on, että saat virheen odottamattoman operaattorin linjoilla.

Toinen tärkeä puute on, että jos et anna sanaa "verbose", mikään ei tapahdu lainkaan. Ihannetapauksessa, jos et anna sanaa verbose, käsikirjoitus palauttaa nimiluettelon.

Käytä nanoa uudelleen muokataksesi rssget.sh-tiedostoa ja muokkaa koodia seuraavasti:

#! / bin / bash

jos [$ 1 = "verbose"]
sitten
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
muu
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi

Tallenna tiedosto ja suorita se kirjoittamalla seuraavat:

sh rssget.sh verbose

Nimien, kuvausten ja linkkien luettelo tulee näkyviin. Käynnistä se uudelleen seuraavasti:

sh rssget.sh otsikot

Tällä kertaa vain otsikot tulevat näkyviin.

Skripti ylimääräinen osa on rivillä 4 ja esittelee toisen lauseen. Pohjimmiltaan käsikirjoitus sanoo, jos ensimmäinen parametri on sana "verbose" saada kuvaus, linkit ja otsikot RSS-syöte, mutta jos ensimmäinen parametri on muuta vain saada luettelon otsikoista.

Skripti on parantunut hieman, mutta se on edelleen puutteellinen. Jos et anna parametria, saat silti virheen. Vaikka annatte parametrin, vain sanomalla, että et halua verbaalista, ei tarkoita, että haluat vain otsikoita. Olet ehkä juuri kirjoittanut verbose väärin esim. Tai olet ehkä kirjoitettu kyyhkysiä, joka on tietenkin merkityksetön.

Ennen kuin yritämme selvittää nämä ongelmat, haluan näyttää vielä yhden komennon, joka liittyy IF-lauseen kanssa.

Muokkaa rssget.sh-skriptiasi seuraavasti:

#! / bin / bash

jos [$ 1 = "all"]
sitten
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "kuvaus"]
sitten
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

muu
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi

Päätin päästä eroon sanasta verbose ja korvasi sen kaikella. Se ei ole tärkeä osa. Yllä oleva käsikirja esittelee elifin, joka on lyhyt tapa sanoa ELSE IF.

Nyt skripti toimii seuraavasti. Jos suoritat sh rssget.sh, saat sitten kuvaukset, linkit ja otsikot. Jos sen sijaan käytät vain sh rssget.sh -kuvausta, saat vain otsikot ja kuvaukset. Jos toimitat jonkin muun sanan, saat listan otsikoista.

Tämä tuo esiin keinon saada nopeasti esiin luettelo ehdollisista lausumista. Vaihtoehtoinen tapa tehdä ELIF on käyttää mitä kutsutaan sisäkkäisiksi IF-lauselmiksi.

Seuraavassa on esimerkki siitä, miten sisäkkäiset IF-lausunnot toimivat:

#! / bin / bash

jos [$ 2 = "aboutdotcom"]
sitten
jos [$ 1 = "all"]
sitten
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "kuvaus"]
sitten
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

muu
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
muu
jos [$ 1 = "all"]
sitten
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "kuvaus"]
sitten
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
muu
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi

Voit vapaasti kirjoittaa kaiken, jos haluat, tai kopioi ja liitä se rssget.sh-tiedostoosi.

Yllä oleva skripti esittelee toisen parametrin, jonka avulla voit valita joko "about.com" tai "lxer.com" RSS-syötteen.

Voit suorittaa sen kirjoittamalla seuraavat:

sh rssget.sh kaikki aboutdotcom

tai

sh rssget.sh kaikki lxer

Voit tietysti korvata kaikki kuvauksilla tai otsikoilla vain kuvaukset tai vain otsikot.

Pohjimmiltaan yllä oleva koodi kertoo, jos toinen parametri on aboutdotcom, katso sitten toinen if -lauseke, joka on sama kuin edellisestä käsikirjoituksesta, jos toinen parametri on lxer ja tarkastele sitten sisäistä if-lausetta uudelleen päättääksesi näyttääkö otsikot, kuvaukset tai kaikki.

Tämä kirjoitus annetaan pelkästään esimerkkinä sisäkkäiselle IF-lausunnolle ja siinä on niin paljon asioita, että käsikirjoitus vie toisen artikkelin selittääkseen ne kaikki. Pääasia on, että se ei ole skaalautuva.

Kuvittele, että haluat lisätä toisen RSS-syötteen kuten Everyday Linux User tai Linux Today? Skripti tulee valtavaksi ja jos päätät, että halutit sisäisen IF-lausekkeen muutoksen, sinun pitäisi vaihtaa se useissa paikoissa.

Vaikka on olemassa aika ja paikka sisäkkäiselle IF: lle, niitä on käytettävä säästeliäästi. Tavallisesti koodia voi koodata uudelleen siten, että et tarvitse sisäkkäistä IF: tä lainkaan. Aion mennä tähän aiheeseen tulevassa artikkelissa.

Katsotaanpa nyt, että määritetään ihmisiä, jotka saapuvat duff-parametreihin. Esimerkiksi yllä olevassa käsikirjoituksessa, jos käyttäjä syöttää jotain muuta kuin "aboutdotcom" 2. parametriksi, artikkeliluettelo näkyy RSS-syöte LXER riippumatta siitä, onko käyttäjä syöttää lxer tai ei.

Lisäksi, jos käyttäjä ei anna "kaikki" tai "kuvaus" ensimmäisenä parametrina, niin oletus on luettelon otsikoista, jotka saattavat olla tai eivät ole käyttäjän tarkoitusta.

Katso seuraava komentosarja (tai kopioi ja liitä se rssget.sh-tiedostoosi.

#! / bin / bash

jos [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"]
sitten
jos [$ 1 = "all"] || [$ 1 = "kuvaus"] || [$ 1 = "title"]
sitten
jos [$ 2 = "aboutdotcom"]
sitten

jos [$ 1 = "all"]
sitten
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "kuvaus"]
sitten
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

muu
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
muu
jos [$ 1 = "all"]
sitten
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "kuvaus"]
sitten
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
muu
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi

Ensimmäinen asia on huomata, että käsikirjoitus on nyt melko suuri ja voit nopeasti nähdä, miten hallinnan sisäkkäiset IF-lausunnot voivat tulla.

Tässä käsikirjoituksessa tärkeä bitti on IF-lauseke || lausuma THEN osa rivillä 2 ja rivillä 4.

|| tarkoittaa OR. Joten linja, jos [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"] tarkistaa, onko toinen parametri yhtä kuin "aboutdotcom" tai "lxer". Jos se ei ole, IF-lausuma on täydellinen, koska ulomman IF: n lausuntoa ei ole .

Vastaavasti rivillä 4 rivi, jos [$ 1 = "all"] || [$ 1 = "kuvaus"] || [$ 1 = "title"] tarkistaa, onko 1. parametri yhtä kuin joko "kaikki" tai "kuvaus" tai "otsikko".

Nyt, jos käyttäjä suorittaa sh rssget.sh -perunoiden juustoa ei palauteta, kun taas ennen kuin he saivat LXER-nimikkeiden luettelon.

Päinvastoin kuin || on &&. && operaattori on AND.

Aion tehdä käsikirjoitus näyttävät enemmän kuin painajainen, mutta se tekee kaiken tärkeän tarkistuksen varmistaakseen, että käyttäjä on antanut 2 parametriä.

#! / bin / bash

jos [$ # - eq 2]
sitten

jos [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"]
sitten
jos [$ 1 = "all"] || [$ 1 = "kuvaus"] || [$ 1 = "title"]
sitten
jos [$ 2 = "aboutdotcom"]
sitten

jos [$ 1 = "all"]
sitten
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "kuvaus"]
sitten
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

muu
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
muu
jos [$ 1 = "all"]
sitten
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "kuvaus"]
sitten
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
muu
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi
fi

Ainoa bitti, joka on ylimääräinen kyseisessä komentosarjassa, on toinen ulkoisen IF-lauseen seuraava: jos [$ # - eq 2] . Jos luet artikkelia syöttöparametreista, tiedät, että $ # palauttaa syötettyjen parametrien lukumäärän. -ekv tarkoittaa tasa-arvoa. IF-lausuma tarkistaa sen vuoksi, että käyttäjä syöttää 2 parametria ja jos se ei ole juuri poistunut tekemättä mitään. (Ei erityisen ystävällinen).

Tiedän, että tämä opetusohjelma on melko suuri. Tällä viikolla ei ole paljon muuta, mutta haluan auttaa käsittelemään komentosarjaa ennen kuin lopetamme.

Yksi viimeinen komento, jonka täytyy tietää ehdollisista lausumista, on CASE-lausuma.

#! / bin / bash


jos [$ # - eq 2]
sitten
tapauksessa $ 2 in
aboutdotcom)
case $ 1 in
kaikki)
rsstail -d -l -u z.about.com/6/o/m/linux_p2.xml
;;
kuvaus)
rsstail -d -u z.about.com/6/o/m/linux_p2.xml
;;
title)
rsstail -u z.about.com/6/o/m/linux.about.com/6/o/m/linux_p2.xml
;;
ESAC
;;
lxer)
case $ 1 in
kaikki)
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
;;
kuvaus)
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
;;
title)
rsstail -u http://lxer.com/module/newswire/headlines.rss
;;
ESAC
;;
ESAC
fi

Tapauslausunto on mukavampi tapa kirjoittaa IF ELSE IF ELSE IF ELSE IF.

Esimerkiksi tämä logiikka

JOS hedelmä = banaanit
NIIN tämä
JOS Hedelmät = appelsiinit
NIIN tämä
JOS Hedelmät = viinirypäleet
NIIN tämä
LOPPU JOS

voidaan kirjoittaa uudelleen seuraavasti:

tapauksessa hedelmiä vuonna
banaanit)
toimi näin
;;
appelsiinit)
toimi näin
;;
viinirypäleet)
toimi näin
;;
ESAC

Pohjimmiltaan ensimmäinen asia tapauksen jälkeen on asia, jonka aiot vertailla (eli hedelmät). Sitten jokainen esine ennen sulkeja on asia, jota vertailet ja mikäli se vastaa edeltäviä rivejä ;; ajetaan. Tapausilmoitus lopetetaan käänteisellä esacilla (joka on tapaus taaksepäin).

Rssget.sh-käsikirjoituksessa tapausseloste poistaa osan tuosta kauheasta pesinnästä, vaikka se ei oikein paranna sitä tarpeeksi.

Parastaaksesi käsikirjoitusta minun on esitettävä muuttujat.

Katso seuraava koodi:

#! / bin / bash

lxer = "lxer.com/module/newswire/headlines.rss"
aboutdotcom = "z.about.com/6/o/m/linux_p2.xml"
näyttö = ""
url = ""

jos [$ # -lt 2] || [$ # -gt 2]
sitten
echo "käyttö: rssget.sh [kaikki | kuvaus | otsikko] [aboutdotcom | lxer]";
exit;
fi

case $ 1 in
kaikki)
display = "- d -l -u"
;;
kuvaus)
display = "- d -u"
;;
title)
näyttö = "- u"
;;
ESAC

tapauksessa $ 2 in
aboutdotcom)
url = $ aboutdotcom;
;;
lxer)
url = $ lxer;
;;
ESAC
rsstail $ display $ url;

Muuttuja määritellään antamalla sille nimi ja sen jälkeen sille arvo. Edellä olevassa esimerkissä seuraavat ovat muuttujien tehtäviä:

lxer = "lxer.com/module/newswire/headlines.rss"
aboutdotcom = "z.about.com/6/o/m/linux_p2.xml"
näyttö = ""
url = ""

Skripti on helposti hallittavissa käyttämällä muuttujia. Esimerkiksi kukin parametri käsitellään erikseen ja siten ei ole sisäkkäisiä IF-lausekkeita.

Näyttömuuttuja asetetaan nyt riippuen siitä, valitsitko kaikki, kuvaus tai otsikko ja url-muuttuja asetetaan aboutdotcom-muuttujan arvoon tai lxer-muuttujan arvoon riippuen siitä, valitsitko aboutdotcom tai lxer.

Rsstail-komennolla on vain käytettävä näytön ja URL-osoitteen arvoa oikein.

Vaikka muuttujat asetetaan vain antamalla heille nimi, käyttämään niitä oikein sinun täytyy sijoittaa $-merkki niiden eteen. Toisin sanoen muuttuja = arvo asettaa muuttujan arvoon, kun taas $ muuttuva arvo antaa minulle muuttujan sisällön.

Seuraava on tämän opetusohjelman viimeinen käsikirjoitus.

#! / bin / bash

lxer = "lxer.com/module/newswire/headlines.rss"
aboutdotcom = "z.about.com/6/o/m/linux_p2.xml"
everydaylinuxuser = "http://feeds.feedburner.com/everydaylinuxuser/WLlg"
linuxtoday = "http://feedproxy.google.com/linuxtoday/linux"
usage = "käyttö: rssget.sh [kaikki | kuvaus | otsikko] [lxer | aboutdotcom | everydaylinuxuser | linuxtoday]"
näyttö = ""
url = ""

jos [$ # -lt 2] || [$ # -gt 2]
sitten
echo $ käyttö;
exit;
fi

case $ 1 in
kaikki)
display = "- d -l -u"
;;
kuvaus)
display = "- d -u"
;;
title)
näyttö = "- u"
;;
*)
echo $ käyttö;
exit;
;;
ESAC

tapauksessa $ 2 in
aboutdotcom)
url = $ aboutdotcom;
;;
lxer)
url = $ lxer;
;;
linuxtoday)
url = $ linuxtoday;
;;
everydaylinuxuser)
url = $ everydaylinuxuser;
;;
*)
echo $ käyttö;
exit;
ESAC

rsstail $ display $ url;

Yllä oleva skripti esittelee lisää RSS-syötteitä ja käytössä on käyttömuuttuja, joka kertoo käyttäjälle, miten komentosarjaa käytetään, jos he eivät joko syöttä 2 muuttujaa tai antavat muuttujille virheelliset vaihtoehdot.

Yhteenveto

Tämä on ollut eeppinen artikkeli ja ehkä liian aikaisin. Seuraavassa oppaassa näytän sinulle kaikki IF-lausekkeiden vertailuvaihtoehdot ja muuttujien osalta on vielä paljon enemmän.

On myös paljon enemmän, mitä voidaan tehdä edellä mainitun käsikirjoituksen parantamiseksi, ja tämä katetaan tulevissa oppaissa, kun tutkimme silmukoita, grep- ja säännöllisiä lausekkeita.

Tutustu How To (Vieritä alas luokkien vieressä nähdäksesi artikkelien luettelon) l inux.about.com -osiosta saadaksesi lisää hyödyllisiä oppaita kaksoisnapsauttamisesta Windows- ja Ubuntu- ohjelmista virtuaaliympäristön luomiseen GNOME-ruutuilla.