[ LUGOS ] Programiranje v shellu

Metod Kozelj metod.kozelj na rzs-hm.si
Sre Maj 28 14:49:08 CEST 1997


Howdy!

On Wed, 28 May 1997, Andrej Cedilnik wrote:

> Pi=B9em eno skriptico v shellu ki bo prebrala direktorij in naredila neka=
j
> z vsemi fajli samo vsakega petega bo malce popravila. Stvar zgleda
> nekako takole:
>=20
> #!/bin/sh
> # zacetek
> ..
> ..
> #=20
# I bo stevec datotek
I=3D1
> for a in *.txt; do=20
>   if [ // poglej =E8e je =BEe peti element ]; then=20
# zgornjo vrstico napises nekako takole:
    if [ ${I} -eq 5 ]; then
>     #naredi nekaj
>     ..
>     #
# Dodas se resetiranje stevca
      I=3D0
>   fi
>   #naredi nekaj
>   ..
>   #
>   // inkrementiraj =B9tevec do pet
# Inkrementiraj stevec, glej tudi 'man expr'
    I=3D`expr ${I} + 1`
> done
> # konec

Zgoraj napisana vrstica z expr se izvaja precej pocasi, ker je to klic
zunanjega programa, zagon pa traja. Ce moras to zelo velikokrat naredit,
je malo nerodno.

Ce si pripravljen na to, da bos napisal skripto, ki bo zahtevala bash,
lahko tisto inkrementiranje napises tudi kot

    I=3D$[ ${I} + 1 ]

ampak potem skripta ne bo vec cisto prenosljiva (ono prej prebavi tudi
'plain' sh, pa ksh, ...).

> Pa =B9e ena stvarca. Rad bi to skripto klical z parametrom direktorij
> recimo=20
>    skripta /usr/doc/text

Parametre dobis v spremenljivkah z imeni '0', '1', '2' ...
${0} je polno ime (s potjo vred) skripte, ${1} je prvi parameter, ${2} je
drugi ...
Lahko jih parsas po vrsti, tako da vedno gledas vrednost ${1}, vmes pa
naredis 'shift'.


Peace!
  Mkx




Dodatne informacije o seznamu Starilist