Páginas

2008/04/02

Komandoen ordezkapena

Erabili ahal dugu komando baten emaitza aldagai baten balioa balitz bezala. Ikusi zenbait adibide:
  • 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:
#!/bin/bash
# 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




Irudiak: . bmp --> .jpg

GNU munduan, irudiak formatu ezberdinetan adierazteko tresna multzo bat badago NetPBM paketean , zein helbide honetan aurki daitezkeen. Hemendik tarball jaitsi eta instalatzeko aginduak leku horretan bertan daude . Paketea instalatu ondoren gure helburua honako hau izango da: script bat sortzea irudiei formatuak aldatzeko.

#!/bin/bash
# scriptaren izena bmpTojpg
echo Idatzi bihurtu nahi duzun irudiaren izena
sarrera_irudia=${1:?'Leheengo argumentua ez didazu eman'}
tarteko_irudia=${sarrera_irudia%.bmp} .ppm
irteera_irudia=${2.?-${tarteko_irudia%.ppm} .jpg}
# NetPBM paketetik bmptoppm eta ppmtojpeg komandoak erabiliko dira
bmptoppm $sarrera_irudia > $tarteko_irudia
ppmtojpeg $tarteko_irudia > $irteera_irudia

Gorde textu-fitxategi hori bmpTojpg izenarekin , exekutatzeko baimenak eman eta egikaritu konprobatzeko.


Script horretan kateen eragileak erabili dira , ondorengo post honetan edo beste honetan azalten den moduan

Karaktere kateen eragileak -II-

Patroi bilatzeko eragileak, hau da karaktere string batean "patroi" bat bilatu . Ikus dezagun hurrengo adibide hau: bidea = /usr/local/share/qemu/bios.core.bin. Kate horretan hurrengo eragileak aplikatzen zaizkie.
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.

Eragile horiek testu kateak kudeatzen laguntzen gaituzte , prozesu-errutinak kodifikatzeko beharra gabe; adibidez horien bitartez aldagai bat existitzen dela ziurta dezakegu, edo katearen zati bat hartu edo ezabatu patroi bat jarraituz, etabar
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
Aplikazioak:
${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

Jakina da $aldagaia espresioak aldagaiaren edukia esan nahi duela , era batean esanda, $aldagaia idaztean aldagaiaren hedapena adierazi nahi dugu.
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 komando multzo bat da, izen batez antzematen duena.Horrela esanda, sript baten antzekoa izango litzateke esan liteke, baina zenbait alde badaude; adibidez, script batean funtzioak exekuta daitezke script-ari dagokion tarte memorian aldagiak bailitzan.
Funtzio bat definitzeko bi era daude, biak baliokikeak direla.
function funtzio_izena{
...
bash komandoak
...
}

edo -----------------------------------------------------------

funtzio_izena(){
...
bash komandoak
...
}
Funtzioak definitzean inguru-aldagaiak bezala memorian biltzen dira, eta exekutatzeko funtzioaren izena komando lerroan idatzi baino ez da egin behar, dagozkion argumentuekin baldin baditu, jaikna.
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



Bash Funtzioak