2010/06/09
ARAZOAK FIREFOX nabigatzailearekin
2008/04/02
Komandoen ordezkapena
- nireDir=$(ls $HOME) ; nireDir aldagaia definitzen da eta ls $HOME komandoaren emaitza baliotzat esleituko zaio. Konprobatzeko egikaritu jarraian hurrengo hau : echo $nireDir
- ls -al $(type -path bash) ; $(type -path bash) komandoaren emaitza ls komandoari pasatzen zaio
- Azter dezagun hurrengo script hau:
# data zehatz batean - $1 - uneko katalogan aldatu diren fitxategien izenak
# ematen digu script honek. Scriptaren izena datafitxategiak.sh
function dataBatenFitxategiak{
ls -lad * | grep "$1" | cut -c54-
}
ls -lad $(dataBatenFitxategiak "$1")
# scriptaren amaiera ; gorde goiko izenarekin
Egikaritzeko , idatzi datafitxategiak.sh "12 Jan" , horrekin Urtarrilak, 12 aldatu diren fitxategien izenak ( bakarrik; cut -c54- komandoa exekutatzen delako ) agertuko zaizkigu
Karaktere kateen eragileak -II-
Eragilea------------------------------ Emaitza
${bidea##/*/}------------------------bios.core.bin
${bidea#/*/}--------------------------local/share/qemu/bios.core.bin
${bidea%.*} ---------------------------/usr/local/share/qemu/bios.core
${bidea%%.*} -------------------------/usr/local/share/qemu/bios
Ikusten denez, # eta % ikurrek , kateetan zenbait ariketa egiteko balio dute :
${aldagaia##patroi} --> aldagairen balioan adierazitako "patroia" , ezkerretik hasita , aurkitzen bada baliotik zatirik luzeena ezabatzen du eta geratzen dena ematen digu; horregatik ${bidea##/*/}-expresio horretan patroia /edozer / da eta /usr.............qemu/ zati hori kenduta bios.core.bin katea da emaitza
Bigarren kasuan, ${bidea#/*/}--, patroia bera da - /*/ - baina emaitza guztiz kontakoa da, esatebaterako, zatirik txikiena kendu eta geratzen dena izango da emaitza, hua da bakarrik /usr/ # eragileak .
Besteak, % eta %% , antzekoak dira baina eskumatik hasten da alderatzen patroia.
2008/03/24
Karaktere kateen eragileak-I.
ADIBIDEAK
${aldag:-balio1} : aldag, baliogabea ez bada (existitzen bada) bere balioa itzultzen du, bestela balio1 ematen digu
${aldag:+balio1} : aldag, baliogabea ez bada (existitzen bada) balioa1 itzultzen du, bestela karaktere gabeko katea ematen digu, haua da: ""
${aldag:=balio1} : aldag, baliogabea ez bada (existitzen bada) bere balioa itzultzen du, bestela definitzen du aldag aldagaia eta balio1 esleizten zaio , balio1 itzultzeaz gain
${aldag:?mezua} : aldag existitzen bada eta ez da baliogabekoa bere balioa ematen digu, bestela aldag:mezua idazten du kontsolan eta scripta gelditzen du. Mezua ez badugu zehazten hurrengo hau izango da aterazten duena: parameter null or not set.
${aldag:desplaz:luzera} aldag aldagairen desplaz.karakterean hasten den eta luzera karaktere kopurua duen azpikatea ematen digu
${egunak:--1} , horren emaitza -1 bada , esan nahi du egunak aldagaia ez dago definututa edota ez du baliorik esleitutua.
${egunak:-+1} , emaitza 1 bada, egunak aldagaiak badu balioren bat esleitutrik
${egunak:?'Kontuz: egunak aldagaiak balioa esleitu behar zaio!!'}, horren emaitza egunak: Kontuz: egunak aldagaiak balioa esleitu behar zaio!! , bada hor geratzen da srcripta , lerro gehiago prozesatu gabe.
${helbidea:5:3} : demagun helbidearen edukia Las mercedes,47-Getxo- string dela ; komandoaren emaitza izango litzateke mer
Pentsa ezazu ikasleen notekin fitxategia daukagula : notak.txt ; eta fitxategi horren egitura honako hau dela:
9,34 Koldo Rodriguez
4,56 Miren Pagazaurtundua
7,45 Miren Solaguren
.... ...................................
hau da ikasle bat lerro batean. n nota altuenak jakin nahi dugu( n ez bada zehazten , lehenengo 5 nota altuenak aterako dira).Horretarako hurrengo script hau presta dezakegu.
#!/bin/bash
# notaOnenak.sh scriptaren izena
# Bi parametro pasatu behar ditugu: noten fitxategia, eta n
# Hurrengo komandoarekin lor dezakegu eskatzen dena
sort -nr ${1:?' Noten fitxategia adierazi behar da!'} | head -${2:-5}
# hori da, baino ez
Egikaritzeko, notaOnenak.sh notak.txt 2 , lehenengo bi nota onenak jakiteko
2008/03/22
Aldagaiak Hedatu
Esatebaterako, adina aldagairen balioa 12 bada $adina delakoak hedatzen du 12 baliora. Idazteko era hori beste baten laburpena da, batzutan ondo idazten ez badugu arazoak dakartzakigu.
Beraz, esan beharra dago $adina era ${adina} erari dagokiola. Noiz erabiltzen dira jakiteko , hona hemen adibide batzuk:
$ izena=Jon
$ deitura= Atxa
$ echo "${izena}_${deitura}
Azkeneko komandoaren emaitza honako hau izango zen: Jon_Atxa
Zer gertatuko litzateke hurrengo honekin?
$ echo "$izena_$deitura"
Emaitza Atxa izango litzateke, arrazoia hau da: Bash-ek $izena_ aldagaia bilatzen saiatuko da, existitzen ez denez ez du hedatuko eta $deitura aldagaiaren hedatzea egingo du.
Labur bliduz: nahasketak daudenean ${...} era erabili.
Beste egoera nahasgarria da posizio parametroak erabiltzen direnean, hau da $12 espresioa Bash-ek hurrengo hau egingo du: $1 aldagaia hedatu du eta jarraian 2 zenbakia idatziko du; ostera , ${12} 12.parametroaren balioara hedatuko du.
Bash Funtzioak
Funtzio bat definitzeko bi era daude, biak baliokikeak direla.
...
bash komandoak
...
}
edo -----------------------------------------------------------
bash komandoak
...
}
Memorian zenbat funtzio dauzkagu jakiteko exekuta daiteke hurrengo komando hau declare -F. ( declare -f komandoak funtzioen inplementazioak ematen digu)
Bestalde, unset -f funtzio_izena egikarituz adierazitako funtzioa memoriatik ezabatzen da.
Gerta liteke izen bera duen script eta funtzioa existitzea ,zein izango zen lehenengoa exekutatzean arazoa sortuz.Bada, ez dago arazorik : kasu hauetan funtzioak lehentasuna du .
Ikus dezagun adibide bat: testu editore bat erailiz , kopiatu hurrengo testu hau:
#!bin/bash
# scrpit-aren izena agurra.sh
clear
echo " eginAgurra() funtzioa erabiliz agurtzen zaitut"
eginAgurra(){
echo " Kaixo $1 laguna"
echo "-----------------------------------------------"
}
eginAgurra #lerro honetan funtzioa exekutatzen da!!!
echo "Agur!!!"
Gorde agurra.sh izenarekin , ta betiko moduan x-baimena jarri exekutatu ahal izateko.Konprobatzeko script-a egikaritu , hurrengo hau idatziz: agurra.sh Pablo
Komandoen historia
Komandoak exekutatzeko ! tekla ere erabili ahal da:
- !! azkeneko komandoa exekutatzen du
- !n :n.garren komandoa exekutatzen du
- !hitza : hitza hitzez hasten den azkeneko komandoa exekutatzen da
Komando Lerroa
- CTRL+C : uneko komandoa geldiarazteko
- CTRL + \ : aurrekoak komandoa behar den moduan gelditzen du, baina arazo batzuengatik CTRL+C konbinazioak ez badu komandoa mozten erabili ahal dugu CTRL+\ konbinazioak non programa edo komandoa gelditzen duen baliaideak ez askatu arren
- CTRL +D sarrera fluxua mozteko ( eof : end of file)
- CTRL+U : kurtsorea dagoen puntutik lerroaren hasierako zatia ezabatzen du
- CTRL + W : uneko posiziotik hitzaren hasierara arte ezabatzen du ( werase: word erase)
- ......
2008/03/05
Argmentuak pasatzen script bati
- definitu bi aldagai, zenbakiak jasotzeko , eta eragiketa egin:
# script-aren izena : batuketa.sh
zenbaki1=5
zenbaki2=3
batura=$zenbaki1+$zenbaki2
echo " Zenbakien batura $batura da"
#-------- amaiera------
Pentsa ezazu beste bi zenbaki batu nahi izanez gero , editatu beharko genuke eta balioak aldatu
- eragiketa prestatu eta teminaletik zenbakiak eman.
batura=$1+$2
echo " Zenbakien batura $batura da"
Bigarren kasu honetan, balioak ez dira inon agertzen, beraz zein batura kalkulatzen da?. Hori jakiteko hobe da egikaritzea , horretarako hurrengo hau idatzi beharko genuke batuketa2.sh 7 8 , horrekin adierazten dugu $1 berdin 7 , eta $2 berdin 8 izango zirela; eta batuketa2.sh 20 67 idaztean $1 berdin 20 , eta $2 berdin 67 dira, hau da komando-lerrotik bi argumento pasatzen zaizkio batuketa.sh script-ari.
Bash-ek posiziozko arumentoak erabiltzen ditu, hau da, komando-lerroan agertzen den ordenean esleitzen zaizkie $1 , $2, ...$9 aldagaiei . Horretaz gain, $0 aldagaiak script-aren izena gordetzen du, eta $* edo $@ aldagaiek argumentoen zerrenda gordetzen dute.
Adibidea:
#/bin/bash
# script-aren izena proba.sh da
# scrip honetan $0, $1,.. erabiltzen dira
batura=$2+$3
echo "Kaixo $1, zure script-aren izena $0 da, pasatu didazu argumento hauek $@ "
echo " pasatutako zenbakien batura $batura da "
# ---------------- amaiera -------------------------
Exekutatzeko , proba.sh Koldo 12 97 , edo nahi den argumentuekin; beti $1 lehenengo parametroa izango da, $2 bigarrena eta $3 hirugarrena
2008/03/04
Teklatutik , aldagaiei balioak eman
Egin proba hurrengo script-arekin:
#/bin/bash
echo " Idatzi zure izena :"
read zureIzena
echo "Idatzi zure adina :"
read adina
# pantaila ezabatzen dugu
clear
echo " Zu zara $zureIzena eta $adina urte dituzu"
echo " ezta?"
Bash Aldagaiak
Idtaz dezagun programatxo bat. Ireki terminal bat , nahi duzun textu editorearekin ( gedit, adibidez)
#-------------------------------------------
izena=Jon
abizena=Lopez
herria=Londres
echo " $Jon jaunak, $abizena du abizena , eta $herria -en bizi da "
#---- script-aren amaiera
Gorde, ezer barik. Betiko moduan, exekutatze baimenak ematen diogu:
Exekutatzeko, idatzi laguna@LinuxUbuntu : ./aldagaiak.sh , hurrengo emaitza hau pantailan izango dugu Jon jaunak Lopez du abizena, eta Londres -en bizi da
2008/02/21
Ingurune-aldagai bereziak
- $0 : aldagai horren balioa da programaren ( script) izena
- $1,$2,...$9 : programari pasatzen zaizkion parametroak . Demagun, teklatutik hartutako bi zenbakiren batura kalkulatzeko script bat egiten dugula, izan bedi batuketa.sh programaren izena. Demagun exekutatzeko idazten dugula batuketa.sh 5 9 . Kasu horretan, $1 aldagaiak 5 balioko du, $2 aldagairen balioa 9 da, eta $0 aldagaiaren balioa batukaeta.sh
- $* : pasatutako argumentoak , zerrenda batean jarrita . Aurreko adibidean $* alagaiaren balioa izango da 5 9 , hau da "bost" eta "bederatzi"
- $# : argumentu kopurua . Aurreko adibidean 2 izango litzateke $#-ren balioa
- $$ :uneko prozesuaren identifikatzailea, hau da PID
2008/02/10
Bash programazioa-III-
- Ireki terminala
- Exekutatu gedit kaixo.sh : honekin gedit editorea abiatu eta kaixo.sh fitxategia sortuko du.
- Idatzi agertzen diren moduan hurrengo lerro hauek:( zenbakiak kenduta)
- #!/bin/bash
- # hau da nire lehenengo script-a
- echo Kaixo guztioi
- Gorde fitxategia eta itxi gedit programa .
- script-a egikaritzeko , idatzi bash kaixo.sh
- script-a kaixo.sh izendatu dugu, hau da .sh luzapena jarri diogu; hori ez da beharrezkoa, Linux munduan fitxategiek ez dute luzapenik baino, argitasuna dela eta, komenigarria da eta horrela bereizten dira .
- script-aren lerroei dagokienean: #! : horrekin bash shell non dagoen adierazten dugu ( horrek balio du beste interpretatzaileekin ere , hau da #!/usr/sbin/php adierazi balitz php scripta izango zela) ; # : horrekin lerro bakarreko komentarioak hasten dira ; echo : komando bat da, eta atzean datorrena bistarako du; komandoak lerro batean idazten dira ( \ "slash" horrekin komandoa bi , (edo gehiago) lerrotan idatz daiteke ); lerro batean komando bat baino gehiago idatz daitezke , horretarako "," (koma) erabiltzen da komandoak bereizteko
- Egikaritzeko bash hello.sh idazten dugu; horrekin zer adierazten da? bash programari deia egiten diogu hello.sh script-a exekuta dezan; beste era batean esanda, bash exekutatzen dugu hello.sh argumentua pasatuz
- Zer pasatuko litzateke komando lerroan hello.sh idatzi bagenu? . Erantzuna--> bash:hello.sh : komadoa not found izango zela , hau da bash shell-ak ez du hello.sh komandoa aurkitu, edo beste era batez esanda hello.sh ez da exekutagarria; ordea, dena dela exekutatzen badugu ls -al , ez digu akatsik emango hello.sh fitxategia hor baitago.Zergatik lehenengo erantzuna? Exekutagarriak diren "fitxategiak" dituzten katalogoak , PATH inguru alagaiak kontrolatzen du. Ondorioa: gure script-ak zuzenean egikarigarraik izateko nahi badugu PATH aldagain egindako script-eko karpetaren bideak egon behar du
- Egin dezagun beste proba bat. Idatzi ./hello.sh . Gogora ezazu . dela uneko katalogoaren izena, beraz ./hello.sh , fitxategia ,zehatz mehatz, non dagoen eesaten diogu bash-i . Horren emaitza izango zen : bash: ./hello.sh: Permission denied .Orain ez digu esaten ez dela fitxategia aurkitzen ( guk espreseki adierazten baitiogu), baizik eta exekutatzeko baimenik ez daukagula.
- Beraz, aurrekoa kontuan harturik script-a exekutagarri bihurtu behar dugu. Nola? , baimenak aldatuz. Gogora ezazu fitxategiek baimen bereziak dituztela .Era ezberdinetan alda daitezke baimenak. Ikus ditzagun : sudo chmod 750 kaixo.sh edo sudo chmod u=rwx,g=rw kaixo.sh. ( aldatzeko root izan behar dugu, horregatik sudo hori )
- Baimenak aldatu ondoren , gure lehenengo script-a egikaritu ahal dugu idazten ./kaixo.sh
- bash shell-ak bilatu behar dituen fitxategiak inguru-aldagai batean jasotzen dira.PATH da aldagai hori ( letra larriaz!!!!) . Ordenagailuan daukagun aldagai horren balioa jakiteko idatzi komando-lerroan echo $PATH .Zuk aldatu ez baduzu, ohikoena da /bin : /usr/bin izatea, hau da komandoak /bin karpetan edo /usr/bin beste horretan aurkituko dira. Horregatik, komando-lerroan kaixo.sh idazti dugunean ez duela fitxategia aurkitzen erantzun digu. Baina PATH -aren balioa alda dezakegu, horretarako idatzi PATH=$PATH:. ; hau da balio berria izango da: zaharrena -$PATH- , gehi laneko katalogoa , puntuz (.) adierazten dena, horretan script-a gordeta baitago. Kontuz, berdin ikurraren (=) aurrean eta atzean ez dagoela hutsunik egon behar; bestalde : ( bi puntu) PATH balioak bereizteko erabiltzen dira.
- PATH ez badugu aldatu nahi , script-a /bin edo /usr/bin karpetatik batean gorde, hori arrikutsua bada ere. Hobe izango litzateke gure script-etarako katalogo bat /usr/bin katalogoan sortzea, ondoren gehitu PATH aldagaian!!!.
- Gertatzen dena da, PATH aldagaiaren balio berria desagertuko dela ordenagailu amatatu ondoren; behin betikoan jartzeko ikasiko dugu beste momentu batean
2008/02/04
Bash programazioa II
Adibidez, exekutatzen badugu
- ls -l *.txt txt hizkiekin bukatzen diren fitxategiak zerrendatuko dira
- ls -l fi*t fi hizkiekin hasi eta t-rekin bukatzen diren fitxategiak aterako dira
? edozein karaktere ordezkatzen du . et?e izan daiteke etxe, etze,etse. Adibidea
- ls -al urtea200? : urtea200a ,urtea2003 urtea200d urtea200x ,...izango da emaizta, baina ez urtea20010,...
Adibidea:
- ls -al ariketa[0-9] : ariketa0, ariketa1, ariketa2,...ariketa9 bistarauko dira, existituz gero
Kontuan izan komandoek , ls, cp,... etab, ez dituztela espresio erregularrak ikusten, baizik eta euren emaitza. Ikus dezagun hurrengo adibidea:
- cp fitxategi[0-4] /Home/jon
cp: fitxategi[0-4] : No such file or direktory.
hau da, hartzen du fitxategi[0-4] fitxategiaren izena eta, jakina ez dago laneko katalogoan.
! karaketerak "EZ HARTZEKO" balio du. Ikus dezagun adibidea:
- ls -al [!0-9]fitxategiak
Informazioa geihago , hemen
Bash programazioa I
Shell programa bat da, eta teklatuan sartzen diren karaktereak atzematea ditu, Windows-en monduan command.com programak egin zuen antzera. Karektereek Sistema Eragileak (SE) ulertzen dituen aginduak osatzen badituzte , agindu horiek fitxategi batean jaso ahal dira gero egikaritzeko.Fitxategi horiek script-tzat ezagunak dira. Garai batean hori zen SE-ra aginduak pasatzeko bide bakarra, egun GUI ( Graphical User Interfaces) , hau da era grafikoak, badauzkagu gauza bera egiteko.
Linux sistemak shell batzuk ditu : bash, tcsh, zsh,... Programa hauekin script-ak sortzen dira ; hurrengo adibideetarako Bourne Again Steve Bournek -bash- Shell erabiliko dugu.
Esan den moduan, ariketak kontsolan ( CLI : Comman Line Interfaces ) probatuko ditugu .Labur bilduz, script bat egiteko behar duguna da: textu editore bat, eta shell bat. Editorea Linux-ek duen vi, nano, gedit, ..., eta shell-erako bash delakoa.
Hasteko , begiratuko dugu erabiltzen dugun shell zein den; horretarako ireki terminal bat eta idatzi:
echo $SHELL.
Emaitza /bin/bash izango da; hau da bash programa /bin karpeta dagoena. Bertsio batzuk daude, jakiteko zein dira daukaguna, idatzi
echo $BASH_VERSION
Gure makinan erabili ahal diren beste shell-ak zeintzuk diren ; egikaritu
cat /etc/shells
(Ez baduzu bash erabiltzen, lehentsia egiteko idatzi chsh -s /bin/bash , hau da ChangeShell (chsh ) bash-era) .
Honaino ailegaturik, alde batetik ,esan dezakegu prest garela script-ak egiteko, bestetik erabili ditugun aginduetan hitzak era ezberdinetan idatzita daudela; adibidean echo $BASH , echo agindu bat da, eta $BASH ingure-aldagaia , era horretan adierazten dira : aginduak letra xehez ,aldagaik larriaz
Script-lengoaia hauek exekutatzeko ez dira konpilatu behar, interpretatzeko modukoak direlako, hau da, aginduak banan-banan probatu ahal ditugu eta aldaketaren bat eginez gero zuzenean ere konproba daitezke.Dena dela, goi mailako lengoia batek dituen agindu egiturak ditu bash programak: aldagaiak, balditzazko egiturak, errepikakorrak etab.