This post has been edited 1 times, last edit by "Nagezahn" (Feb 12th 2010, 4:42pm)
Source code |
|
1 2 3 4 5 |
#! /bin/bash NACHRICHT=$1 LOGNAME=$2 TTY=$3 echo $NACHRICHT | write $LOGNAME $TTY |
Source code |
|
1 |
$ sh nachricht.sh "Operator: Ich brauche einen Ausgang!" operator pts/1 |
Source code |
|
1 |
$ bash nachricht.sh "Hallo Operator!" operator tty1 |
Source code |
|
1 2 |
$ chmod +x nachricht.sh $ ./nachricht.sh |
This post has been edited 3 times, last edit by "Neo" (Feb 12th 2010, 5:51pm)
Das war nicht die ganze Aufgabe. Mir ging es nur um den Teil, der die Nachricht versenden sollte, nicht um das komplette Skript. $LOGNAME und $tty sind bereits beim Einloggen (per SSH) gesetzte Variablen, $nachricht ist einfach ein Platzhalter für die Nachricht (ich hätte stattdessen auch "hallo" oder sonstwas schreiben können).Hallo Nagenzahl,
um welche Klausur (Semester/Jahr) handelt es sich? Wenn man genau ist, würdest du nicht die volle Punktezahl bekommen, nur mal angemerkt:
- 1. Zeile: #! /bin/bash
- wie ist die Belegung der Parameter $tty, $nachricht, $LOGNAME?
Ansonsten ist nichts an der Lösung auszusetzen, vorausgesetzt, die Parameter wurden auch irgendwie belegt.
Der gibt, soweit ich das richtig verstanden habe, das Terminal an (oder so, blicke da nicht wirklich durch). Aber du hast Recht, es funktioniert auch ohne - hatte bei meinen vorherigen Versuchen irgendwie nicht geklappt. Muß wohl was falsch gemacht haben.Wie kommst du auf den $tty-Parameter? Steht das explizit so in der Aufgabe? Es funktioniert ja auch wunderbar ohne.
Allerdings gibt LOGNAME aber nur deinen Benutzernamen an. Du möchtest aber eine Nachricht an einen anderen User senden (so wie ich die Aufgabe verstanden habe). Daher habe ich LOGNAME manuell auf den Wert des 2. Kommandozeilenparameters gesetzt ($2).$LOGNAME und $tty sind bereits beim Einloggen (per SSH) gesetzte Variablen
Source code |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#!/bin/bash empfaenger=$1 isonline=`who | grep $empfaenger` echo "Geben Sie ihre Nachricht ein: " nachricht=`cat <<HERE` #read nachricht if [ "$isonline" ] then echo $nachricht | write $empfaenger echo "Nachricht versandt an $empfaenger" else echo $nachricht | mail $empfaenger -s "Sie sind nicht da" lastlogin=`last -R | grep -m1 "$" | cut -c 23-32` echo "$empfaenger war zuletzt am $lastlogin eingeloggt" fi |
Source code |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#!/bin/bash empfaenger=$1 isonline=`who | grep $empfaenger` echo "Geben Sie ihre Nachricht ein: " cat >tmpmsg #cat >tmpmsg <<HERE if [ "$isonline" ] then write $empfaenger < tmpmsg echo "Nachricht versandt an $empfaenger" else mail $empfaenger -s "Sie sind nicht da" < tmpmsg lastlogin=`last -R | grep -m1 "$" | cut -c 23-32` echo "$empfaenger war zuletzt am $lastlogin eingeloggt" fi rm tmpmsg |
Wieso steht hier grep -m1 "$"? Hier müsste doch grep -m1 "$empfaenger" stehen?
lastlogin=`last -R | grep -m1 "$" | cut -c 23-32`
Bei mir funktionieren die Skripte. Das 2. Skript finde ich etwas besser, da du hier auch neue Zeilen einfügen kannst. Nur verstehe ich folgende Zeile nicht:Wieso steht hier grep -m1 "$"? Hier müsste doch grep -m1 "$empfaenger" stehen?
lastlogin=`last -R | grep -m1 "$" | cut -c 23-32`
Bei mir funktioniert die 1. Version - ich habe allerdings auch die Raute in Zeile 7 entferntAber was mich trotzdem wundert ist, dass die 2. Version nicht mit "cat > tmpmsg <<HERE" funktioniert. Komischerweise hört das Script sofort nach dem echo "Bitte Geben sie ihre Nachreicht ein" auf. Und was ich auch nicht verstehe: Wieso funktioniert die erste Version (bei mir) nicht? Irgendwie wartet das Skript nicht so lange bis ich meine Nachricht fertig habe sondern geht sofort weiter.
This post has been edited 2 times, last edit by "Neo" (Feb 14th 2010, 1:06pm)
Source code
1 nachricht=`cat <<HERE`
Source code |
|
1 |
read -p "Nachricht: " nachricht |
This post has been edited 1 times, last edit by "Salz" (Feb 14th 2010, 1:23pm)