ubuntuusers.de

Broadcast Message

Status: Gelöst | Ubuntu-Version: Server 8.10 (Intrepid Ibex)
Antworten |

Jermuk

Anmeldungsdatum:
2. Dezember 2008

Beiträge: 23

Hallo an alle:

ich habe mal verscuht ein Broadcast Message Script zu schreriben:

1
2
3
4
5
6
7
#!/bin/sh
echo Bitte geben sie einen Text ein, den sie an alle Benutzer schicken wollen:
touch msg.txt
read message
echo $message > msg.txt
wall msg.txt
rm msg.txt

Leider zeigt er mir immer an: ": bad variable name"

Vielen Dank im Voraus,

Gruß Jermuk

BodomBeachTerror

Anmeldungsdatum:
24. März 2008

Beiträge: 788

Auch wenn du einen anderen Namen benutzt?

BadBoy

Avatar von BadBoy

Anmeldungsdatum:
25. Oktober 2007

Beiträge: 479

die man-Page zu wall spuckt mir das hier aus:

SYNOPSIS
       wall [-n] [ message ]

damit wäre das Schreiben der Datei unnötig

Jermuk

(Themenstarter)

Anmeldungsdatum:
2. Dezember 2008

Beiträge: 23

BadBoy schrieb:

die man-Page zu wall spuckt mir das hier aus:

SYNOPSIS
       wall [-n] [ message ]

damit wäre das Schreiben der Datei unnötig

1
2
3
4

wall: we can't read Hallo
wall: we can't read "Hallo"
wall: we can't read 'Hallo'
1
2
3
4
5
6
7
#!/bin/sh
echo Bitte geben sie einen Text ein, den sie an alle Benutzer schicken wollen:
touch msg.txt
read text
echo $text > msg.txt
wall msg.txt
rm msg.txt

": bad variable name" "rm: cannot remove msg.txt': No such file or directory" Dies sind die Fehler! Danke für die schnellen Antworten! Auch wenn sie nichts gebracht hatten! Gruß Jermuk

The-Compiler Team-Icon

Avatar von The-Compiler

Anmeldungsdatum:
21. April 2006

Beiträge: 2640

Wohnort: Winterthur, Schweiz

Jermuk schrieb:

1
echo Bitte geben sie einen Text ein, den sie an alle Benutzer schicken wollen:

hier umbedingt den Text mit Gänsefüsschen einschliessen, das ist notwenig wenn der Text Leer/Sonderzeichen drin hat.

1
2
3
4
5
touch msg.txt
read text
echo $text > msg.txt
wall msg.txt
rm msg.txt

Das würd ich ja eher so schreiben:

1
2
read text
echo "$text" | wall

Flo

Jermuk

(Themenstarter)

Anmeldungsdatum:
2. Dezember 2008

Beiträge: 23

: bad variable name
: not found 5: wall

Jetzt kommt dies!

Ich habe einfach auskommentiert:

1
2
3
4
5
6
7
8
#!/bin/sh
echo "Bitte geben sie einen Text ein, den sie an alle Benutzer schicken wollen:"
#touch msg.txt
read text
echo "$text" | wall
#echo $text > msg.txt
#wall msg.txt
#rm msg.txt

Danke für die Antwort! Aber das Problem ist immer noch nicht gelöst! Schade! ☹

Gruß Jermuk

The-Compiler Team-Icon

Avatar von The-Compiler

Anmeldungsdatum:
21. April 2006

Beiträge: 2640

Wohnort: Winterthur, Schweiz

Also bei mir läufts ohne Probleme. Sicher dass du das Skript auch genau so hast wie hier?

Flo

BadBoy

Avatar von BadBoy

Anmeldungsdatum:
25. Oktober 2007

Beiträge: 479

hö? o_O hab ich ne andere Wand? (=wall)

Jermuk

(Themenstarter)

Anmeldungsdatum:
2. Dezember 2008

Beiträge: 23

Ja, ich habs genauso!

Gruß Jermuk

The-Compiler Team-Icon

Avatar von The-Compiler

Anmeldungsdatum:
21. April 2006

Beiträge: 2640

Wohnort: Winterthur, Schweiz

Wie heisst die Nachricht mit dem ihr das Skript testet?

Ausserdem füg mal am Anfang des Skripts ein set -x ein und gib mir dann die Ausgabe davon.

Und ein ls -l /bin/sh wär mal noch gut zu wissen.

Flo

Jermuk

(Themenstarter)

Anmeldungsdatum:
2. Dezember 2008

Beiträge: 23

ls -l /bin/sh :

lrwxrwxrwx 1 root root 4 2008-12-02 15:02 /bin/sh -> dash

set -x :

Illegal option -

jahb

Anmeldungsdatum:
10. April 2008

Beiträge: 238

Wohnort: Reinfeld

noch kürzer wäre natürlich

1
2
3
#!/bin/bash -x
echo "Bitte geben sie einen Text ein, den sie an alle Benutzer schicken wollen:"
read|wall

und das -x war für das sh bestimmt also :

1
#!/bin/sh -x

was ich allerdings durch ein /bin/bash (s.O.) ersetzten würde dann klappt es auf jeden Fall!

Gruß Simon

edit: Argh vertan klappt doch nicht ohne variable!

Aber ein

1
2
3
#!/bin/bash 
read text
echo $text|wall 

Funktioniert!

The-Compiler Team-Icon

Avatar von The-Compiler

Anmeldungsdatum:
21. April 2006

Beiträge: 2640

Wohnort: Winterthur, Schweiz

jahb schrieb:

und das -x war für das sh bestimmt also :

Ne, das sollte mit set -x schon klappen. Ausserdem wird der shebang gar nicht ausgewertet wenn das Skript mittels sh gestartet wird.

Aber ein

1
2
3
#!/bin/bash 
read text
echo $text|wall 

Funktioniert!

Nicht wenn der text Sonderzeichen enthält, umbedingt wie oben in meinem Code das $text in echo $text in Gänsefüsschen einklammern!

Flo

phst

Anmeldungsdatum:
24. Juni 2007

Beiträge: 527

Noch einfacher:

1
2
3
#!/bin/bash
read text
wall <<< "$text"

Jermuk

(Themenstarter)

Anmeldungsdatum:
2. Dezember 2008

Beiträge: 23

Danke für alle eure Antworten!

Die Lösung war:

#!/bin/sh
echo "Bitte geben sie einen Text ein, den sie an alle Benutzer schicken wollen:"
read text
echo $text|wall 

Aber hab ich den ein anderes "wall" ?

Vielen Dank nochmal!

Gruß Jermuk

Antworten |