WOW bin überrascht wie viele hier anworten und wie produktiv die Antworten sind.
Sorry Robert war da halb auf dem Absprung nach Hause. Wollte sagen Danke Robert und nicht das was da steht...
Ich hab mir nochmal mit allen beschäftig ein bissel davon nochmal zu Hause angschaut. Dabei sind mir nochmal einige Fragen zu den Thema gekommen.
Der Befehl mit dem sed hat bei mir wunderbar geklappt in der Konsole:
sed -n '/^cpu MHz/ {s/.*: \(.*\)\..*/\1/;p}' /proc/cpuinfo
Aber bei diesem Programm bekomme ich diese Fehlermeldun: "Syntax error: "(" unexpected" ich hab es schon auf die erste Klammer eigeschränkt aber auch das verschieben der Klammr oder ersetzen mittels "{" hat mir eine Falsche Anzahl an CPU's beschert. Ich bkommen dann die glich Fehlrmeldung oder 9 CPU's angezeigt anstelle von "2 CPU's".
#!/bin/bash
takt=( $(sed -n '/^cpu MHz/ {s/.*: \(.*\)\..*/\1/;p}' /proc/cpuinfo ) ) # die Taktraten werden als Array gespeichert
zahl=${#takt[@]} # = Anzahl Elemente im Array
echo "$zahl CPUs gefunden"
for t in ${takt[@]} ; do # geh die Elemente durch
if [ "$t" -gt 2700 ] ; then
echo "$t MHz ist ok"
fi
done
Ich benutzt auch awk weil ich es verstanden hab und es mir einleuchtend ist. Das Programm hier funktioniert bei mir nicht so wie ich es mir dachte.
#!/bin/bash
zaehler=0
while IFS=$' \t\n:.' read -r f1 f2 clock _; do
[ "$f1 $f2" = "cpu MHz" ] && [ $clock -gt 2700 ] && (( zaehler++ ))
done < /proc/cpuinfo
echo $zaehler
Die Ausgabe ist nur "0" und nichts weiter außerdem wollt ich da Fragen ob dieses Programm ausgelegt ist auf nur 2 CPU's oder ob das nur 2 Parameter. Also es bezieh sich auf das "f1 f2"
So jetzt meine beiden Erfolgserlebnisse.
Zuerst hab ich mir das Programm von track weiter angeschaut ging super auch die einarbeitung von dem speichern der Daten war dann sehr einfach da der Aufbau ja meinem ähnlich war.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 | #!/bin/bash
zaehler=0 # inizialisiert den Wert zeahler mi "0"
rm test1234 # löscht die existierende Datei und den gesamten Inhalt
while read line ; do # liest jede Zeile der Datei ein und speichert sie zwischen
teil1="${line%% *}" # 1. Teil bis zum 1. TAB
if [ "$teil1" = "cpu MHz" ] ; then # abfrage ob der 1.Teil des Strings glich mit der abfrage ist
zaehler=$(( zaehler + 1 )) # zeahlt pro Schleifen durchlauf um 1 höher
#echo "Schleife: $zaehler"
teil2="${line#*: }" # 2. Teil hinter dem ": "
#echo "$teil2"
teil2="${teil2%.*}" # Nachkomma-Anteil abtrennen
#echo "$teil2"
if [ "$teil2" -gt 2700 ] ; then # abfrage mit -gt ob $teil2 groeßer ist als 2700
wert="OK" # setzt die Variable auf OK
#echo "$wert"
else
wert="ERROR" # setzt die Variable auf ERROR
#echo "$wert"
fi # ende des if-Blocks
#echo "$wert"
( echo "$zaehler.CPU-Wert $wert" ) >> test1234
#echo "Schleife: $zaehler"
fi
done < /proc/cpuinfo # durchlauffen der Datei
#echo $zaehler
if [ "$zaehler" = 0 ] ; then # abfrage ob der zeahler ungleich "0" ist
( echo "CPU-Wert nicht gefunden" ) >> test1234
fi
|
So und jetzt das ultimative Programm was bei mir gestern Nachmittag nicht funktioniert hat vom Robert. Ich hatte gestern das Codestück "awk -F : '" und ja es ist mit awk werd das mal versuchen auf grep zu ändern. Und hab auch noch das Programm als Quelltext anbei gefügt.
#!/bin/bash
rm test12345; ( awk -F : '/^cpu MHz/{++cnt; if ( (0 + $2) > 2800 ) w="OK"; else w="ERROR"; print cnt ". CPU-Wert " w } END{if ( cnt == 0 ) print "CPU-Wert NOT FOUND"}' /proc/cpuinfo ) >> test12345Und und dann noch eine kleine Frage am Rande was ist der TE ist das der Themen Ersteller?
LG
Loran D. Peon