Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: Misa09 29 Července 2008, 21:47:41

Název: sčítání BASH
Přispěvatel: Misa09 29 Července 2008, 21:47:41
Ahoj, zkouším udělat jeden skript, který mimo jiné by měl sčítat čísla před jterými je "!".  Zkoušela jsem to takto:
Kód: [Vybrat]
i=0;
while [ $i -lt $pocet ];do
zk=`cat stromy|grep "$i)"|egrep -o '\!.*'|tr -d !`;
let "celkem=celkem+zk";
let i=i+1;
done
toto mě funguje, ale pouze do čísla kolem 1 300, kolem tohoto čísla se objeví hláška:
 
Kód: [Vybrat]
line 26: let: 39
12: syntax error in expression (error token is "12")
celkem 1342
sčítání od tohoto čísla nefunguje,na řádce 26 je let "celkem=celkem+zk";   
zkoušela jsem misto toho i :
Kód: [Vybrat]
celkem=`expr $celkem + $zk`
celkem=$((celkem + zk))
nic nepomohlo....
díky za radu
Název: Re: sčítání BASH
Přispěvatel: johniez 30 Července 2008, 11:43:01
vypis si obsah promenny zk pred tim nez ti to slitne.
Název: Re: sčítání BASH
Přispěvatel: nettezzaumana 30 Července 2008, 13:22:34
zk=`cat stromy|grep "$i)"|egrep -o '\!.*'|tr -d !`; // spatne, nemuze se provest
while [ $i -lt $pocet ];do .. // vhodnejsi je pouzit :: for((i=0;i<$pocet;i++)) { .. }

> a=5 b=3 && echo $(($a + $b))
8

let "celkem=celkem+zk"; // uplne spatne .. ma-li scitat, tak rozhodne nescita ^^^, takze konecny vysledek muze vypadat takto ::

for((i=0;i<$pocet;i++)) {
    celkem=$(($celkem + $(vyraz_ktery_jsme_dosazovali_do_zk))); // nac inicializovat novou promennou?
}
Název: Re: sčítání BASH
Přispěvatel: nettezzaumana 30 Července 2008, 13:44:35
ad.x) $(.. egrep -o '\!.*'|tr -d !) lze nahradit $(sed 's/^.*\!\(.*\)$/\1/')
Název: Re: sčítání BASH
Přispěvatel: Misa09 02 Srpna 2008, 12:02:55
Moc děkuji pomohlo
Kód: [Vybrat]
celkem=$(($celkem + $(vyraz_ktery_jsme_dosazovali_do_zk)));akorát je zvlastní, že když jsem zkoušela smazat jednu tu zavorku tak to nefungovalo :-)