PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Shellscript] If abfrage [NEWBIE]



Bellerophon
20-06-2003, 17:11
Hallo,
bis jetzt waren meine Shell-Scripte immer nur kleine Ansammlungen von Befehlen... Aber jetzt habe ich ein Problem:
Erstmal mein Script:

#!/bin/bash
echo "This requires a reboot. Do you want to continue? (yes/no)"
read yeno
if $yeno = "yes"
then
echo "-----------------------------------------------" > /var/log/auth.clear
echo "Die auth-Datei wurde das letzte mal geleert am:" >> /var/log/auth.clear
date >> /var/log/auth.clear
echo "-----------------------------------------------" >> /var/log/auth.clear
rm /var/log/auth
reboot
fi

Wenn ich das Ausführe bekomme ich folgende Fehlermeldung:

/usr/sbin/clearauth: line 4: no: command not found
Woran liegt das? Kann ich mit if nicht einfach, wie bei Basic, den Inhalt einer Variable mit einem Text vergleichen???
Wäre toll, wenn ihr mir helfen könntet!
Bellerophon

pulp
20-06-2003, 19:26
müsste so heissen:

if [ $yeno = "yes" ]


wenn das net geht dann so:

if [ $yeno = "yes" ]; then

blablubb

fi

gruss pulp

Bellerophon
23-06-2003, 15:13
Hello again!!!
Das funktioniert leider immernoch nicht! Hier die Fehlermeldung

/usr/sbin/clearauth: line 4: [no: command not found
Beide Varianten ausprobiert... Hat noch jemand ne Idee???

pitu
23-06-2003, 15:28
1.)

schreib mal ${yeno} statt $yeno.

2.) [] ist eine abkuerzung fuer "test" heisst also

if test ${yeno} = "yes" => if [ ${yeno} = "yes" ]

Dabei ist darauf zu achten, dass du nach dem [ und vor dem ] garatiert ein Leerzeichen hast, sonst funktionierts nicht.

3) am besten schreibst du am besten "$yeno" = "yes" oder "${yeno}" = "yes"

gruss,
pitu

Bellerophon
23-06-2003, 16:18
Also... hab das jetzt gerade nochmal ausprobiert und es funktioniert immer noch nicht. Mir scheint so, als würde er die Variable $yeno immer auflösen, also als Befehl verstehen. Wenn ich nämlich z.B. echo eingebe, versteht er den Befehl und führt alles aus. Es scheint garkeine If-Abfrage zu geben... Hier nochmal das ganze Script. Erstellt hab ich es mit vi und dann in eine ausführbare Datei umgewandelt (chmod 700 root).

#!/bin/bash
echo "This requires a reboot. Do you want to continue? (yes/no)"
read yeno
if [${yeno} = "yes"]; then
echo "-----------------------------------------------" > /var/log/auth.clear
echo "Die auth-Datei wurde das letzte mal geleert am:" >> /var/log/auth.clear
date >> /var/log/auth.clear
echo "-----------------------------------------------" >> /var/log/auth.clear
rm /var/log/auth
reboot
fi

Habt ihr noch ne Idee???

pitu
23-06-2003, 16:38
if [${yeno} = "yes"]; then

so wie das Ausschaut, hast du da immer noch keine Leerzeichen drin!

Mach mal dieses:


if [ "$yeno" = "yes" ] ; then
^ hier und ^ Leerzeichen hin!!!!


Und natuerlich vor und nach dem = auch eins und vor dem ; und dann kannst du auch mal die geschweiften Klammern probieren wenns immer noch nicht geht, aber so muesste es schon reichen. Gib am besten vorher mal $yeno mittels eines echos aus, damit du sicher bist, dass nicht da schon ein Fehler auftaucht.

gruss,
pitu

Bellerophon
23-06-2003, 17:44
Ok, Ok... man muss schon richtig lesen! Jetzt funktionierts erwartungsgemäß... Danke!!! DANKEDANKEDANKEDANKEDANKE!!!!!

Aber noch ne kleine Frage: Kennst du/kennt jemand ne Seite mit ner guten Einführung in die bash programmierung??? Oder eventuell auch ein Buch??? Wäre euch sehr dankbar!
Bis dann
Bellerophon

phate
24-06-2003, 06:33
Hi Bellerophon,

siehe hier http://www.mrunix.de/forums/showthread.php?threadid=31592

gruss,

phate