Suse Linux 10 Skript zum Hardware auslesen

Antworten
Nachricht
Autor
Kami
Beiträge: 1
Registriert: 20. Jun 2006 15:30

Suse Linux 10 Skript zum Hardware auslesen

#1 Beitrag von Kami » 20. Jun 2006 15:37

Hi,

kann mir einer von euch sagen, warum dieses folgende Skript nicht geht? Und wie die Syntax dazu wäre, hab da keinen peil von :roll:

Code: Alles auswählen

 #! /bin/bash
#Datei: hardware
#Autor: Kami
#Datum: 21.06.2006
#Syntax:
#------------------------------------------------------------------------
echo "$ (ifconfig | grep "inet addr")"
echo "Datum: $ (date)" >> /root/$(hostname.dat)"
echo "erstellt von: $ (whoami)" > /root/$(hostname.dat)"
hostname -i
free -m
fdisk -l
grep "model name" /proc/cpuinfo
grep "cpu" /proc/cpuinfo
lspci | grep VGA
cat /var/log/boot.msg | grep ROM
cat /etc/SUSE-release
echo "Arbeitsspeicher $(find /var/log/boot.msg -type f | xargs grep "LOWMEM")"
echo "Test durchgeführt von $(whoami) am $(date)" > /root/$(hostname)

Benutzeravatar
Janka
Beiträge: 3585
Registriert: 11. Feb 2006 19:10

#2 Beitrag von Janka » 20. Jun 2006 18:04

Was soll es denn tun? Welche Fehlermeldung erhältst du?

Am Skript selbst fällt mir die erste Zeile ins Auge: vor und hinter #! darf kein Leerzeichen stehen.

Außerdem muss das Skript ausführbar sein (chmod u+x skript), und du must natürlich einen gültigen Pfad zum Aufrufen angeben. Aus Sicherheitsgründen ist bei Linux das aktuelle Verzeichnis nicht im Pfad, um das Skript in dem Pfad aufzurufen, in dem es liegt, muss man ./skript schreiben.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

Benutzeravatar
jochen
prolinux-forum-admin
Beiträge: 699
Registriert: 14. Jan 2000 15:37
Wohnort: Jülich
Kontaktdaten:

#3 Beitrag von jochen » 20. Jun 2006 19:43

Uijeeee... Man kann zwar erkennen, was es tun soll, aber es *strotzt* vor Fehlern...

Code: Alles auswählen

 #! /bin/bash
Janka trifft den Nagel auf den Kopf.

Code: Alles auswählen

echo "$ (ifconfig | grep "inet addr")"
Für die Kommandosubstitution $() darf zwischen $ und ( kein Leerzeichen stehen. Abgesehen davon ist sie hier nutzlos bzw. doppelt gemoppelt - ein schlichtes 'ifconfig | grep "inet addr"' tut es auch.

Code: Alles auswählen

echo "Datum: $ (date)" >> /root/$(hostname.dat)"
Bezüglich $() s.o. Beim Erstellen der Logdatei (in welche Du die IP-Adresse *nicht* hineingeschrieben hast?) muss das .dat außerhalb der $() stehen, da es ja nicht Bestandteil des Kommandos "hostname" ist.

Code: Alles auswählen

echo "erstellt von: $ (whoami)" > /root/$(hostname.dat)"
S.o., in beiden Punkten.

Code: Alles auswählen

hostname -i
free -m
fdisk -l
grep "model name" /proc/cpuinfo
grep "cpu" /proc/cpuinfo
lspci | grep VGA
cat /var/log/boot.msg | grep ROM
Im Prinzip i.O., aber in der Logdatei landen die Daten natürlich nicht.

Code: Alles auswählen

cat /etc/SUSE-release
S.o., außerdem Groß-/Kleinschreibung beachten - ich bin mir ziemlich sicher, dass die Datei /etc/SuSE-release heißt! Und noch als Denkanstoß: Was passiert, wenn dieses Skript auf einem Fedora/Ubuntu/Gentoo-System ausgeführt wird...?

Code: Alles auswählen

echo "Arbeitsspeicher $(find /var/log/boot.msg -type f | xargs grep "LOWMEM")"
Das find-Statement ist eine komplizierte Art und Weise, das grep-Kommando 'grep "LOWMEM" /var/log/boot.msg' zu schreiben... Außerdem Ausgabe wieder nach stdout statt Logdatei.

Code: Alles auswählen

echo "Test durchgeführt von $(whoami) am $(date)" > /root/$(hostname)
$(hostname) funktioniert, aber dann fehlt die Endung .dat hinter ),. Und wenn sie dort stünde, würdest Du den bisherigen Inhalt überschreiben, da Du > statt >> als Ausgabeumlenkung verwendet hast.

Ich will auch nicht ausschliessen, dass da noch weitere Fehler lauern oder das Skript nicht macht, was Du willst oder dass ich Dich vielleicht an einigen Punkten mißverstanden habe - aber bevor der Berg oben nicht abgearbeitet ist, machen weitere Erläuterungen keinen echten Sinn mehr.

Viel Spass beim korrigieren, basteln & lernen,

Jochen
Die grösste Lüge der EDV? "Mal eben..."

Antworten