Hastapen gida BASHrako - Baldintzak eta aldagaiak

Sarrera

Ongi etorri "Hastapeneko gida BASHrako" hirugarren zatian. Aurreko bi artikulu galduak badituzu, ziurrenik zuk nahi duzuna jakin nahi duzue gida hau beste BASH scripting gidei ezberdina dela.

Gida hau BASH-ko hasiberri oso batek idatziko du eta irakurtzen ari naiz ikasten dudan bezala. BASH-en hasiberri naizen bitartean, software-garapenaren alorrean nago. Idatzi dudan gauza gehienak Windows plataforma izan da.

Lehenengo bi gidak ikus ditzakezu bisitatuz:

BASH scripting berrira bazaude, lehenengo bi gidak irakurtzea gomendatzen dut honekin jarraitu aurretik.

Gida honetan adierazpen kondizionalak erabiltzeko, erabiltzailearen sarrera probatzeko eta gidoia nola funtzionatzen duen kontrolatzeko nabarmenduko dut.

Instalatu rsstail

Gida hau jarraitzeko, RSS iturriak irakurtzeko erabiltzen den rsstail izeneko komando lerroko aplikazioa instalatu beharko duzu.

Debian / Ubuntu / Mint oinarritutako banaketa mota bat erabiltzen ari bazara, honako hau da:

sudo apt-get install rsstail

Fedora / CentOS eta abarren artean, idatzi honako hau:

yum install rsstail

OpenSUSE mota honetarako:

zypper instalatu rsstail

IF adierazpena

Ireki terminal bat eta sortu rssget.sh izeneko fitxategia, honako hau idatziz:

sudo nano rssget.sh

Nano editore barruan testu hau sartu:

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

Fitxategia gorde CTRL eta O sakatu eta irten CTRL eta X. sakatuz.

Exekutatu script hau idatziz:

sh rssget.sh

Gidoiak linux.about.com RSS iturrien izenburuen zerrenda itzuliko du.

Ez da gidoia oso baliagarria, RSS jarioetako izenburuak berreskuratzen baititu, baina Linux.about.com RSS iturriaren bidea gogoratu behar izan du.

Ireki rsget.sh script-a nano berriro eta editatu fitxategia honela begiratzeko:

#! / bin / bash

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

Exekutatu script berriro hau idatziz:

sh rssget.sh zehaztugabea

Oraingoan, RSS iturriak izenburua, esteka eta deskribapenarekin itzultzen du.

Aztertu xehetasun txiki bat script-a:

#! / Bin / bash idazten dugun script guztietan agertzen da. Hurrengo lerroa, funtsean, erabiltzaileak emandako lehen sarrera parametroari begiratzen dio eta "aditz" hitza alderatzen du. Sarrera-parametroa eta "aditz" hitzarekin bat datozen lerroak bat datoz gero eta ondorengoak exekutatzen dira.

Goiko scriptak, jakina, huts egiten du. Zer gertatzen da sarrera-parametro bat ez baduzu ematen? Erantzuna ustekabeko operadorearen ildoetan errore bat lortzen duzu.

Bestelako akats nagusia da "aditz" hitza ematen ez baduzu, ez da ezer gertatzen. Egokiena word verbose ez baduzu, gidoiak tituluen zerrenda bat itzultzen du.

Erabili nano berriro fitxategia rssget.sh editatzeko eta honela kodea aldatu:

#! / bin / bash

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

Gorde fitxategia eta exekutatu honako hau idatziz:

sh rssget.sh zehaztugabea

Izenburuen, deskribapenen eta esteken zerrenda agertuko da. Orain exekutatu berriro honela:

sh rssget.sh izenburuak

Une honetan izenburuen zerrenda bat agertzen da.

Gidoiaren zati gehigarria 4 linean dago eta beste adierazpena aurkezten du. Funtsean, script-ak esaten du lehen parametroa "verbose" hitza bada, lortu deskribapena, estekak eta izenburuak RSS iturritik, baina lehen parametroa besterik ez bada, tituluen zerrenda bat lortuko duzu.

Scriptak pixka bat hobetu du baina oraindik ere huts egin du. Parametro bat sartzen ez baduzu, akatsen bat jasoko duzu. Parametro bat ematen baduzu ere, ados ez baduzu esan nahi ez baduzu, tituluak bakarrik nahi dituzu. Baliteke gaizki idatzita egotearen adibidea edo behar bezala idatzitako usoak idatz ditzakezula.

Gai horiek garbitzen eta probatzen hasi aurretik IF adierazpenarekin bat datorren komandoa erakutsi nahi dut.

Editatu zure rssget.sh script-a honela begiratzeko:

#! / bin / bash

[$ 1 = "guztiak" bada)
gero
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "description"]
gero
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

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

Galdera hitza ezabatu eta guztiekin ordeztu erabaki nuen. Hori ez da zati garrantzitsua. Goiko scriptak ELIF IF esaten duen modu laburra aurkezten du.

Orain scriptak honela funtzionatzen du. Sh rssget.sh exekutatzen baduzu, deskripzioak, estekak eta izenburuak jasoko dituzu. Bestela, sh rssget.sh deskribapena exekutatzen baduzu, izenburuak eta deskribapenak lortuko dituzu. Beste edozein hitz hornitzen baduzu izenburuen zerrenda bat jasoko duzu.

Honek baldintzazko adierazpenen zerrenda bizkor bat bidaltzen du. ELIF-en modu alternatibo bat IF adierazitako habiarekin ezagutzen dena da.

Jarraian, IF adierazpenak nola biltzen diren erakusten duten adibide bat da:

#! / bin / bash

[$ 2 = "aboutdotcom"] baldin badago
gero
[$ 1 = "guztiak" bada)
gero
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "description"]
gero
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

bestela
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
bestela
[$ 1 = "guztiak" bada)
gero
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "description"]
gero
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
bestela
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi

Feel free nahi duzun guztia idatzi edo kopiatu eta itsatsi ezazu zure rssget.sh fitxategian.

Goiko scriptek 2. parametro bat aurkezten du, "buruz" edo "lxer.com" "RSS" jarioa aukera dezazun.

Jarraitzeko, idatzi hau exekutatzeko:

sh rssget.sh all aboutdotcom

edo

sh rssget.sh lxer guztiak

Jakina, deskribapen edo izenburuak bakarrik ordezkatu ditzakezu deskribapenak edo izenburuak bakarrik emateko.

Funtsean Goiko kodea esaten du bigarren parametroa ingurukoa bada, ondoren bigarren adierazpena baldin badago aurreko sekuentziatik bigarrena bada, bigarren parametroa lxer bada, orduan barruko adierazpena baldin badago berriz, izenburuak edo deskribapenak erakutsi erabakitzeko. edo dena.

Script hau betiko IF adierazitako habiaratze baten adibide gisa ematen da eta horrelako gauzak azaltzeko beste artikulu bat hartuko luke. Gai nagusia ez da eskalagarria.

Imajinatu beste RSS iturria gehitu nahi duzula, esaterako, Everyday Linux Erabiltzailea edo Linux Gaur egun? Gidoia erraldoi bihurtuko litzateke eta nahi baduzu, barruko IF adierazpena aldatzea leku askotan aldatu beharko zenuke.

Nahasketa baterako denbora eta tokia egon arren, gutxi erabili beharko lirateke. Normalean zure kodea berraztertzeko modu bat izaten da, beraz, ez duzu beharrik habiaratua. Gai honi buruz egingo dut hurrengo artikulu batean.

Dezagun arauak parametro parametroak sartzen dituzten pertsonen arazoa konpontzeko. Esate baterako, script-a gainetik, erabiltzaileak "aboutdotcom" baino zerbait gehitzen badu bigarren parametro gisa, artikulu zerrenda bat agertzen da LXERren RSS iturritik, erabiltzaileak lxer sartu ala ez.

Horrez gain, erabiltzaileak ez badu "dena" edo "deskribapena" sartu lehenengo parametro gisa, orduan lehenetsia erabiltzaileak nahi duenaren edo ez izan daitezkeen izenen zerrenda da.

Begiratu script hau (edo kopiatu eta itsatsi ezazu zure rssget.sh fitxategian.

#! / bin / bash

[$ 2 = "aboutdotcom"] bada || [$ 2 = "lxer"]
gero
[$ 1 = "guztiak"] baldin badago || [$ 1 = "description"] || [$ 1 = "titulua"]
gero
[$ 2 = "aboutdotcom"] baldin badago
gero

[$ 1 = "guztiak" bada)
gero
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "description"]
gero
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

bestela
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
bestela
[$ 1 = "guztiak" bada)
gero
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "description"]
gero
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
bestela
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi

Kontuan izan beharrekoa da gidoia nahiko handia dela eta azkar ikusi ahal izango duzu nola kontrolik gabe geratu diren IF adierazpenak.

Script honetan garrantzitsua den bitartea IF adierazpena da || adierazpena THEN atala 2. linean eta 4. lineean.

The || OR dago. Beraz, lerroa bada [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"] egiaztatzen du 2. parametroa den ala ez "aboutdotcom" edo "lxer". Hala ez bada, IF adierazpena osatu egingo da kanpoko IF gehienetarako adierazpenik ez dagoenik .

Era berean, lerroaren 4. lerroan [$ 1 = "guztiak"] bada || [$ 1 = "description"] || [$ 1 = "titulua"] egiaztatzen du 1. parametroa "guztiak" edo "deskribapen" edo "titulua" berdinak diren ala ez.

Orain, erabiltzaileak sh rssget.sh exekutatzen badu patatak gazta ez da ezer itzuliko, LXERren izenburuen zerrenda jaso aurretik.

The opposite of || da &&. The && operadorea AND dagokio.

Gidoia idazteaz gain, amesgaiztoa bezalakoa da, baina egiaztapen garrantzitsua egiten du erabiltzaileek 2 parametro eman dizkiotela ziurtatzeko.

#! / bin / bash

[$ # -eq 2] bada
gero

[$ 2 = "aboutdotcom"] bada || [$ 2 = "lxer"]
gero
[$ 1 = "guztiak"] baldin badago || [$ 1 = "description"] || [$ 1 = "titulua"]
gero
[$ 2 = "aboutdotcom"] baldin badago
gero

[$ 1 = "guztiak" bada)
gero
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "description"]
gero
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

bestela
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
bestela
[$ 1 = "guztiak" bada)
gero
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "description"]
gero
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
bestela
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi
fi

Script horretan aparteko bit bakoitza beste kanpoko IF adierazpena da honela: [$ # -eq 2] bada . Sarrera parametroei buruzko artikulu bat irakurtzen baduzu, $ # sarrerako parametro kopuruaren zenbaketa bat emango dizu. The -eq berdinak dira. IF adierazpenak, beraz, egiaztatzen du erabiltzaileak 2 parametro sartu zituela eta ezer egin gabe atera ez baziren. (Ez da bereziki errespetatzen).

Jakin badakit tutorial hau nahiko handia dela. Aste honetan ez dago askoz gehiago, baina aurretik guk gidoia prestatu nahi dut.

Baldintzazko adierazpenei buruz ikasteko behar duzun azken komandoa CASE adierazpena da.

#! / bin / bash


[$ # -eq 2] bada
gero
kasuetan $ 2 sartu
aboutdotcom)
kasu $ 1 sartu
guztiak)
rsstail -d -l -u z.about.com/6/o/m/linux_p2.xml
;;
deskribapena)
rsstail -d -u z.about.com/6/o/m/linux_p2.xml
;;
Izenburua)
rsstail -u z.about.com/6/o/m/linux.about.com/6/o/m/linux_p2.xml
;;
esac
;;
lxer)
kasu $ 1 sartu
guztiak)
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
;;
deskribapena)
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
;;
Izenburua)
rsstail -u http://lxer.com/module/newswire/headlines.rss
;;
esac
;;
esac
fi

Kasu-adierazpena idazte-modu atsegina da IF IF ELSE IF IF.

Adibidez logika hau

Fruta IF = bananak
Hau da hau
ELSE fruta bada = laranjak
Hau da hau
ELSE fruta bada = mahatsa
Hau da hau
END IF

berridatz daiteke honela:

kasu fruta in
bananas)
egin hau
;;
laranjak)
egin hau
;;
mahatsak)
egin hau
;;
esac

Funtsean, kasuan kasuko lehenengo elementua konparatzen ari zaren gauza da (hau da, fruta). Ondoren, parentesi artean elementu bakoitza aurrezten ari zaren gauza da eta lerroak aurreko lerroarekin bat badatoz; exekutatu egingo da. Kasuen adierazpena alderantzizko esakarekin amaitzen da (kasu hori atzeraka da).

Rssget.sh script-ean, kasu-deklarazioak nahasketa horietako batzuk kentzen ditu, baina ez da nahikoa.

Script hau benetan hobetzeko, aldagaiak aurkeztu behar ditut.

Begiratu hurrengo kodea:

#! / bin / bash

lxer = "lxer.com/module/newswire/headlines.rss"
aboutdotcom = "z.about.com/6/o/m/linux_p2.xml"
display = ""
url = ""

[$ # -lt 2] || [$ # -gt 2]
gero
echo "usage: rssget.sh [all | description | title] [aboutdotcom | lxer]";
irteera;
fi

kasu $ 1 sartu
guztiak)
display = "- d -l -u"
;;
deskribapena)
display = "- d -u"
;;
Izenburua)
display = "- u"
;;
esac

kasuetan $ 2 sartu
aboutdotcom)
url = $ aboutdotcom;
;;
lxer)
url = $ lxer;
;;
esac
rsstail $ bistaratu $ url;

Aldagai bat definitzen da izen bat emanez eta balioa esleituz. Aurreko adibidean ondokoak dira aldagaiak:

lxer = "lxer.com/module/newswire/headlines.rss"
aboutdotcom = "z.about.com/6/o/m/linux_p2.xml"
display = ""
url = ""

Gidoia berehala kudeagarria da aldagaiak erabiliz. Adibidez, parametro bakoitza bereizita kudeatzen da eta, beraz, ez dago IF adierazpen habiarik.

Pantailako aldagaia orain zehazten da, aukeratu duzun ala ez, deskribapen edo tituluaren arabera, eta url aldagaia inguruko aldagaiaren balioa edo lxer aldearen balioa zehazten du, aboutdotcom edo lxer aukeratuz gero.

Rsstail komandoa pantailaren balioa eta URLa behar bezala erabili behar ditu.

Aldagaiak aldatzen diren bitartean izen bat emanez, benetan erabili behar dituzu $ seinale bat jarri aurretik. Beste era batera esanda, variable = balioak balio aldagai bat ezartzen du, eta $ aldagaiak esan nahi du aldagaiaren edukia ematen.

Honako hau tutorial honen azken gidoia da.

#! / 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 = "usage: rssget.sh [all | description | title] [lxer | aboutdotcom | dailylinuxuser | linuxtoday]"
display = ""
url = ""

[$ # -lt 2] || [$ # -gt 2]
gero
echo $ usage;
irteera;
fi

kasu $ 1 sartu
guztiak)
display = "- d -l -u"
;;
deskribapena)
display = "- d -u"
;;
Izenburua)
display = "- u"
;;
*)
echo $ usage;
irteera;
;;
esac

kasuetan $ 2 sartu
aboutdotcom)
url = $ aboutdotcom;
;;
lxer)
url = $ lxer;
;;
linuxtoday)
url = $ linuxtoday;
;;
everydaylinuxuser)
url = $ everydaylinuxuser;
;;
*)
echo $ usage;
irteera;
esac

rsstail $ bistaratu $ url;

Goiko scriptak RSS jario gehiago sartzen ditu eta erabiltzaileak script-a nola erabiltzen duen esaten dio erabiltzaileari aldagai bat sartzen ez badute edo aldagaiaren aukera okerrak sartzen badituzte.

Laburpen

Artikulu epiko bat izan da eta oso urrunegi joan daiteke. Hurrengo gidan IF adierazpenak alderatzeko aukera guztiak erakutsiko dizkizut eta aldagaiei buruz hitz egiteko askoz ere gehiago dago.

Gainera, aipatutako gidoia hobetzeko egin daitekeen beste bat ere badago eta etorkizuneko gidetan estalita egongo da begiztak, grep eta adierazpen erregularrak aztertuz.

Begiratu How To (artikuluak ikusi ahal izateko kategoriak igaro aurretik joan) inux.about.com atala, Windows eta Ubuntu abiarazte bikoitzeko gidak baliagarriagoak aurkitzeko GNOME kutxak erabiliz makina birtual bat konfiguratzeko .