PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : mathe - rechnen und zählen auf der (ba)sh



sysdef
10.12.2004, 12:55
hi, nachdem der bg-programm-exit-code-abfang-thread immer mathematischer wird... (hat ja keiner mit "gerechnet" *gg*)
ich hoffe es kommen noch andere lösungen und rechenarten dazu.


juhu, endlich weiß ich wie ich eine bash-Zählscheife programmiere:

for i in $(seq 0 9)
do
echo $i
done

oder auch ...

i=0
while [ $i -lt 9 ]
do
echo $i
i=`expr $i + 1`
doneoops, jetzt hab noch das mit dem rechnen auf der bash verraten :)

wenn du von 00 bis 10 zählen willst, oder von 000 bis 100 ist seq besser, siehe option -w
Und fürs Incrementieren oder Dekrementieren und sonstigem rechnen in der bash gibts let, also quasi


a=0
b=0
let a++;
let a--
let a=b + 1


einfach nur zählen kann man auch noch mit

echo "while (i<10){i++}"|bc

gruss, sys.

edit: hab was gefunden, für jeden, der sehnsüchtig auf etwas wartet. -> http://linide.sourceforge.net/d0086.txt

oenone
11.12.2004, 11:51
btw: let ist nicht auf bash begrenzt.. gibts zumindest auch für ksh, sh, zsh

addieren, subtrahieren, multiplizieren, dividieren, etc... geht auch so (bei bash, sh, zsh, ksh) - es ist dem `expr $i ...` vorzuziehen, da hier keine eigene subshell gestartet wird:

i=5
echo $((i*5)) # ausgabe: 25
i=$((i+1)) # i ist nun 6
zählschleifen, etc... ('seq' ist nicht auf jedem system vorhanden)

for i in {0,1,2,3,4,5,6,7,8,9}
oder:
for i in 0{0,1,2,3,4,5,6,7,8,9}{0,1,2,3,4,5,6,7,8,9}
beim ersten hat i die werte 0 bis 9, beim zweiten 000 bis 099.
bei zsh gibt es noch diese möglichkeit (beispiel für 000 bis 999):

for i in {0-9}{0-9}{0-9}
das geht auch für nicht-nummerische dinge, z.b.:

for char in {a,b,y,c,d,q,2}
hintergrund ist, dass for die werte bei einem zeichen aus $IFS trennt und über diese werte iteriert.
{a,b,c} ist nichts anderes als "a b c", und das leerzeichen ist in $IFS enthalten.
sinnvoll wird es z.b. bei dateinamen:
foobar{a,b,c} wird zu "foobara foobarb foobarc" - bei größeren sachen wie z.b.
foobar{0-9}{0-9} wird es noch deutlicher, hier sind es dann 100 verschiedene werte (foobar00 bis foobar99)

auf bald
oenone