Forum » Programiranje » [bash] štetje vrstic
[bash] štetje vrstic
urosz ::
imam probleme, ker mi števec vrstic vedno vrne 0. recimo da pogoju ustreza 5 vrstic, mi jih teh 5 izpiše pravilno, števec n pa ostane vedno na 0. mogoče ve kdo, zakaj?
let "n = 0" ps -ef | while read line do if [vrstica zadošča nekemu pogoju]; then let "n += 1" echo $line fi done echo Stevilo zadetkov: "$n"
technolog ::
n=0 n+=1
Let lahko kar spuščaš.
Drugač se mi pa zdi, da mamo isto zadevo. Izziv7 namreč :)
Zgodovina sprememb…
- spremenil: technolog ()
Brane2 ::
declare -i n=0
Pa ne vem zakaj rabiš "let".
Pa pred in za enačajem pri bashu NI presledka
Pa ne vem zakaj rabiš "let".
Pa pred in za enačajem pri bashu NI presledka
On the journey of life, I chose the psycho path.
urosz ::
zdaj mam tako, tudi ne deluje:
declare -i n=0 ps -ef | while read line do if [vrstica zadošča nekemu pogoju]; then n+=1 echo $line fi done echo $n
Brane2 ::
kaj ti ne dela ?
Se ne poveča n ali ti nikoli ne izpiše nobene vrstice ?
Daj malo več opisa, nimam kristalne krogle.
Se ne poveča n ali ti nikoli ne izpiše nobene vrstice ?
Daj malo več opisa, nimam kristalne krogle.
On the journey of life, I chose the psycho path.
urosz ::
n se nikoli ne poveča, kljub temu da se izvede stavek. recimo da mi izpiše 5 vrstic, bi moral n biti 5x povečan za 1 = 5. ampak ostaja na 0.
Brane2 ::
Meni dela:
#! /bin/bash
declare -i n=0
ps -ef | while read line
do
if [ "${line##*/lib64}" != "${line}" ] ;
then n+=1 ;
echo $line ;
echo
fi
done
echo $n
#! /bin/bash
declare -i n=0
ps -ef | while read line
do
if [ "${line##*/lib64}" != "${line}" ] ;
then n+=1 ;
echo $line ;
echo
fi
done
echo $n
On the journey of life, I chose the psycho path.
urosz ::
ah končno, sem našel na spletu. problem je bil, da se v primeru:
while zanka izvaja v sub-shellu, od kjer pa ni dostopa do spremenljivk glavnega shella in so vse lokalne.
rešitev:
pa deluje ne glede na to na kakšen način definiram in povečujem n
ok hvala vsem vseeno za pomoč
ps -ef | while read line do .. done
while zanka izvaja v sub-shellu, od kjer pa ni dostopa do spremenljivk glavnega shella in so vse lokalne.
rešitev:
while read line do .. done < <(ps -ef)
pa deluje ne glede na to na kakšen način definiram in povečujem n
ok hvala vsem vseeno za pomoč
Brane2 ::
Ja, prav imaš. Sem spregledal, da sem nekaj zabrkljal.
On the journey of life, I chose the psycho path.
metalc ::
V realnem življenju se takšno nalogo najraje reši s pomočjo "stranišča" , torej zunanjega programčka wc (ime izvira iz word count), stikalo -l. man wc
Brane2 ::
Niti ne. Stalno pišem take mini skripte na gentooju, kjer narediš nekaj, vendar samo za del instaliranih paketov in nimaš samo števca linij.
On the journey of life, I chose the psycho path.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Microsoftov giveaway knjigOddelek: Programiranje | 2621 (1459) | OvCa77 |
» | bash skripta ki bere txtOddelek: Programiranje | 1099 (829) | Mike0 |
» | Domaca Naloga OSOddelek: Programiranje | 1293 (693) | b |
» | [UNIX] arg list too longOddelek: Programiranje | 1932 (1187) | bijonda |
» | UNIX, mv, muvanje fajlseOddelek: Pomoč in nasveti | 1267 (1133) | BigWhale |