Mittelwerte berechnen

B

blinkyy

Grünschnabel
Hallo Leute!
Ich bin auf eine Aufgabe gestoßen die ich nicht lösen kann.

Man soll ein Skript schreiben, das den Mittelwert für beliebig viele übergebene Parameter berechnet und dafür die Befehle shift oder eval benutzen.

Ich hab erst vor kurzem mit Unix/Linux und mit dem Programmieren angefangen, also bei mir liegt es schon an den noch sehr wackligen Grundlagen. Also was mach ich denn mit shift oder eval und wie soll ich damit den Mittelwert berechnen?

Hat jemand dazu eine Idee?

Danke schonmal im Vorraus!
 
Wenn du die Bash benutzt, brauchst du dazu gar kein eval oder shift:
Code:
#!/bin/bash

if [ "$#" -eq 0 ]; then
    echo 'No parameters given.'
    exit 1
fi

sum=0
for param in "$@"; do
	sum=$(($sum+$param))
done

echo "Num: ${#}"
echo "Sum: ${sum}"
echo "Avg: $(($sum/$#))"

exit 0

Oder mit shift (und ohne Bash-Variablen):
Code:
#!/bin/bash

if [ -z "$1" ]; then
	echo 'No parameters given.'
	exit 1
fi

num=0
sum=0
while [ ! -z "$1" ]; do
    num=$(($num+1))
    sum=$(($sum+$1))
    shift
done

echo "Num: ${num}"
echo "Sum: ${sum}"
echo "Avg: $(($sum/$num))"

exit 0

Das hier könnte dir in Zukunft weiterhelfen: http://tldp.org/LDP/abs/html

MfG,

Tblue
 
Zuletzt bearbeitet:
Hey vielen Dank!
Aber wie gehe ich denn die ganzen Zahlen ein, von denen ich meinen Mittelwert berechnen will?
Einfach mit
read ... ? Werden die dann mit Punkten oder Leerzeichen getrennt?


Könnte mir noch jemand in ganz einfachen Worten erklären was eval oder shift macht? Finde dazu keine gute Erklärung!
 
Zuletzt bearbeitet:
Wenn ein (bash)-Skript mit Parametern aufgerufen wird, so sind die Parameter innerhalb des Skriptes als durchnumerierte $1,...$n abrufbar, d.h.
mit einem Aufruf wie
mittelwert.sh 4 8 2 9
sind innerhalb des Skriptes mittelwert.sh die Variablen/ Parameter $1(=4), $2 (= 8 ), $3 (=2) und $4 (=9) definiert und benutzbar.
Ein 'shift' innerhalb des Skriptes schmeisst die erste Variable weg und numeriert die anderen durch, so dass sie dann von $1,...${n-1} laufen. Das bedeutet, wenn Du weisst, dass Du die (bis dahin) erste Variable nicht mehr benoetigst, kannst Du ein 'shift' aufrufen, so dass dann die naechste Variable mit $1 ansprechbar ist.
 
Richtig. Erlaube mir, für eval einfach die manpage zu zitieren (aufrufbar durch "man 1p eval"):
The eval utility shall construct a command by concatenating arguments together, separating each with a <space>. The constructed command shall be read and executed by the shell.
[...]
Examples:
foo=10 x=foo
y='$'$x
echo $y
$foo
eval y='$'$x
echo $y
10
 

Ähnliche Themen

Shell-Skriptum erstellen ( Anfänger der Stufe 0 )

Mittelwert berechnen mit Ruby

Shell Problem

Vim GE-PACKT

C++ Klausur durchgefallen

Zurück
Oben