Suse Linux 10 Skript zum Hardware auslesen

Post Reply
Message
Author
Kami
Posts: 1
Joined: 20. Jun 2006 15:30

Suse Linux 10 Skript zum Hardware auslesen

#1 Post by Kami »

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: Select all

 #! /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)

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#2 Post by Janka »

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.

User avatar
jochen
prolinux-forum-admin
Posts: 699
Joined: 14. Jan 2000 15:37
Location: Jülich
Contact:

#3 Post by jochen »

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

Code: Select all

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

Code: Select all

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: Select all

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: Select all

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

Code: Select all

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: Select all

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: Select all

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: Select all

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..."

Post Reply