Erinnerung mit Winpopup

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Linuxneuling, 10.01.2006.

  1. #1 Linuxneuling, 10.01.2006
    Linuxneuling

    Linuxneuling Tripel-As

    Dabei seit:
    09.02.2004
    Beiträge:
    249
    Zustimmungen:
    0
    Moin, ich hab ein kleines Script geschrieben, der die Benutzer an Bänder einlegen erinnert.

    Code:
    #!/bin/bash
    # 
    #
    #Script, der die User an Baender einlegen erinnert!
    #
    
    LOGFILE=/home/noe/band$(date +%d%m%y)
    
    mt tell
    if [ $? -eq "2"]
            then
    
            ping -q -W 5 -c 3 administrator >/dev/null
            else echo " Keiner anwesend, der das Band einlegen koennte " >> $LOGFILE
                    if [ $? ]
                    then
            echo " Automatische Erinnerung:
    
     Bitte Baender einlegen.
    
     Danke! " | smbclient -M administrator
                    else
    
                    ping -q -W 5 -c 3 ws003 >/dev/null
    
                            if [ $? ]
                            then
            echo " Automatische Erinnerung:
    
     Bitte Baender einlegen.
    
     Danke! " | smbclient -M ws003
                    else
                            ping -q -W 5 -c 3 ws004 >/dev/null
    
                                    if [ $? ]
                                    then
            echo " Automatische Erinnerung:
    
     Bitte Baender einlegen.
    
     Danke! " | smbclient -M ws004
                                    else
                                    echo "Alle PCs ueberprueft" >> $LOGFILE
    
                    fi
                    fi
                    fi
                    fi
    
    Nach dem ausführen des Scriptes bekomme ich folgende Meldung:
    Code:
    sh erinnerung
    mt: /dev/tape: Input/output error
    erinnerung: line 11: [: missing `]'
    WARNING: The "printer admin" option is deprecated
    Connected. Type your message, ending it with a Control-D
    sent 68 bytes
    
    Kann mir jemand sagen, was die folgende Zeile bedeutet: erinnerung: line 11: [: missing `]' bzw. die Warnung?
    Merkwürdig ist auch, dass das Skript nicht IMMER eine Nachricht sendet, wenn ich das Skript als normaler User ausführe... Kann mir jemand sagen, warum das so ist?
    Mit Shellprogrammierung habe ich nicht viel zu tun gehabt ;)
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Vor die abschliessende eckige Klammer in Zeile 11 muss ein Leerzeichen:
    Code:
    if [ $? -eq "2" ]
    
     
  4. #3 Linuxneuling, 10.01.2006
    Linuxneuling

    Linuxneuling Tripel-As

    Dabei seit:
    09.02.2004
    Beiträge:
    249
    Zustimmungen:
    0
    Danke!

    Jetzt habe ich eine Frage, warum das Skript gleich abbricht, wenn der erste Rechner offline ist? Ich hab deshalb die if schleifen verschachtelt, damit die Nachricht an den nächsten Rechner gesendet wird, wenn der eine offline ist? Der erste Rechner der online ist bekommt die Nachricht, der zweite nicht, wenn der erste online ist... Was hab ich falsch programmiert?
     
  5. hmhweb

    hmhweb Mitglied

    Dabei seit:
    29.11.2004
    Beiträge:
    46
    Zustimmungen:
    0
    Hallo,

    vermutlich, weil nach dem ersten ping sofort die else echo ... zeile kommt
    und danach erst der error code [ $?] des echo Befehls (und nicht des ping) abgefragt wird.

    hmh
     
  6. #5 Linuxneuling, 10.01.2006
    Linuxneuling

    Linuxneuling Tripel-As

    Dabei seit:
    09.02.2004
    Beiträge:
    249
    Zustimmungen:
    0
    Danke für deine Hilfe!

    Leider funktioniert es noch immer nicht, ich hab die Zeile else echo rausgenommen... würde auch ohne die Zeile auskommen, jedoch weiss ich nicht wie if drauf reagiert... das skript bleibt immer noch an der gleichen stelle stehen... dass keine verbindung zum ersten Rechner hergestellt werden kann...

    Kann mir jemand sagen, wo ich den else für die erste if schleife eingeben kann?
     
  7. #6 Xanti, 10.01.2006
    Zuletzt bearbeitet: 10.01.2006
    Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Erstmal würde ich Dir raten, Deine Programme übersichtlicher zu schreiben. Wenn ich Dich richtig verstehe, willst Du ins Logfile schreiben, wenn Du keinen Rechner erreichen kannst. Eine (von vielen) Lösungen wäre, eine Hilfsvariable zu benutzen, wie folgt:

    Code:
    if [test Bandlaufwerk]
    then
      reached=0
    
      ping xxx
      if [ $? ]
      then
        echo "Band einlegen..."
        reached=1
      fi
    
      ping yyy
      if [ $? ]
      then
        schreibe "Band einlegen..."
        reached=1
      fi
      ...
      if [ $reached -eq 0 ]
      then
        schreibe log
      fi
    fi
    
     
  8. #7 Linuxneuling, 10.01.2006
    Linuxneuling

    Linuxneuling Tripel-As

    Dabei seit:
    09.02.2004
    Beiträge:
    249
    Zustimmungen:
    0
    Hallo Phorus!

    Danke für dein gutes Beispiel! Mit dem Skript wollte ich erreichen, dass die Kollegen und ich erinnert werden, wenn zur einem bestimmten Zeitpunkt kein Band eingelegt ist! Mir ist alles bis auf reached kar... ich gehe davon aus, dass reached die rückgabewert ist wie eq... Morgen werde ich es testen...
     
  9. #8 Xanti, 11.01.2006
    Zuletzt bearbeitet: 11.01.2006
    Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    reached ist eine Hilfsvariable, sie hat nix mit dem System zu tun. Am Anfang initialisierst Du sie mit einem (freigewählten) Wert 0. Man kann sie auch mit dem String "No" oder "gixgax" initialisieren, was völlig egal ist, weil nur Du sie benutzt. Sobald irgendein Rechner erreicht wird, setzt Du sie auf einen anderen Wert, also hier 1, oder "Yes" ....

    Zum Schluss wertest Du die Variable aus. Wenn sie noch "jungfräulich" ist, also den Startwert hat, bedeutet das, dass sie nie in einer "Computer erreicht"-Umgebung geändert wurde -> ergo kein Computer erreicht.

    edit: ps: Im Grunde genommen, kann man reached als Rückgabewert interpretieren.
     
  10. #9 Linuxneuling, 11.01.2006
    Linuxneuling

    Linuxneuling Tripel-As

    Dabei seit:
    09.02.2004
    Beiträge:
    249
    Zustimmungen:
    0
    Hallo Phorus,

    ich glaube da liegt eine Missverständis vor. Sorry, wegen unübersichtlichen Skript, den ich gepostet habe...

    Code:
    LOG=/home/noe/band$(date +%d%m%y)
    #Zuerst soll überprüft werden, ob das Band im Laufwerk eingelegt ist...
    mt tell
    if [ $? -eq 2 ]
    #Wenn nein, dann bekomme ich eine Wert 2 und es sollte eine Erinnerung  an #einen von die 3 PC´s geschickt werden, einfach den ersten, der online ist...
    then
    # wenn PC administrator online ist, sollte eine Erinnerung geschickt werden und somit hat es sich erledigt..
            ping -q -W 5 -c 3 administrator >/dev/null
      else echo " Band ist eingelegt " >> $LOG
      if [ $? ]
      then
        echo "Automatische Erinnerung:
    Bitte Band einlegen!
    Danke!"
      fi
      else
    # Wenn der PC administrator nicht online war, soll das Skript einfach den nächsten Rechner überprüfen...
            ping -q -W 5 -c 3 ws003 >/dev/null
      if [ $? ]
      then
        echo "Automatische Erinnerung:
    Bitte Band einlegen!
    Danke!"
    
      fi
      else
            ping -q -W 5 -c 3 ws004 >/dev/null
      if [ $? ]
      then
       echo "Automatische Erinnerung:
    Bitte Band einlegen!
    Danke"
      fi
      else
            echo "Kein PC online" >> $LOG
    fi
    
    Irgendwie interpretiere ich die Skriptsprache nicht richtig... Besonders mit else habe ich im Moment ein Problem. Sorry, da ich das mit reached weg gelassen habe, ich hatte das schon versucht und dies weggenommen, weil ich noch nicht genau wusste was dies macht... Jetzt werde ich weiterversuchen... Kann ich das alles mit if realisieren oder muss ich das mit einer while schleife machen?
     
  11. #10 ninguno, 11.01.2006
    ninguno

    ninguno Tripel-As

    Dabei seit:
    13.05.2005
    Beiträge:
    162
    Zustimmungen:
    0
    das geht schon mit if , du brauchst keine while schleife. aber deine syntax ist falsch. ein if schaut so aus
    Code:
    if (( $?==0 ))
    then
      echo "gut"
    else
      echo "nix"
    fi
    du hingegen machst immer ein
    Code:
    if
    then
    ...
    fi
    else
    ...
    
    das heisst du machst die if abfrage schon vor dem else zweig mit fi zu, das kann nicht funktionieren.

    ps: bei deiner source code formatierung ist schwer erkennbar was du überhaupt vorhast.
     
  12. #11 Linuxneuling, 11.01.2006
    Linuxneuling

    Linuxneuling Tripel-As

    Dabei seit:
    09.02.2004
    Beiträge:
    249
    Zustimmungen:
    0
    danke, ich hab schon bemerkt, dass ich if irgendwie falsch verschachtelt habe...
    irgendwie kriege ich das nicht hin, weil das Beispiel das Phorus geschrieben hat ist egal, ob das Band eingelegt ist und schickt die nachricht an allen rechner, die ich eingetragen habe...

    Ich möchte gerne ein Skript, das überprüft ob das Band ein gelegt ist, wenn ja, dann braucht das Skript nichts mehr machen... wenn nicht, dann soll es den nächsten Rechner der online ist eine Nachricht schicken, aber nicht an alle 3 gleichzeitig... ich glaube, dass das mit if nicht funktionieren kann, oder?
     
  13. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  14. #12 ninguno, 11.01.2006
    ninguno

    ninguno Tripel-As

    Dabei seit:
    13.05.2005
    Beiträge:
    162
    Zustimmungen:
    0
    das geht schon. du musst nur die if's ineinander verschachteln. um bei phorus' beispiel zu bleiben:
    Code:
    if [test Bandlaufwerk]
    then
      reached=0
    
      ping xxx
      if [ $? ]
      then
        echo "Band einlegen..."
        reached=1
      else
        ping yyy
        if [ $? ]
        then
          schreibe "Band einlegen..."
          reached=1
        fi
      fi
      ...
      if [ $reached -eq 0 ]
      then
        schreibe log
      fi
    fi
     
  15. #13 Linuxneuling, 11.01.2006
    Linuxneuling

    Linuxneuling Tripel-As

    Dabei seit:
    09.02.2004
    Beiträge:
    249
    Zustimmungen:
    0
    Danke an allen! :) Wieder was dazugelernt... jetzt klappt es!
     
Thema:

Erinnerung mit Winpopup

Die Seite wird geladen...

Erinnerung mit Winpopup - Ähnliche Themen

  1. Erinnerungen an Robocop und Co

    Erinnerungen an Robocop und Co: Die letzten Tage lief ja mal wieder auf dem Hessischen Rundfunk Robocop, leider habe ich es zu spät mitbekommen. Auf jedenfall kamen die guten...
  2. Geburtstags_Erinnerungs-Programm

    Geburtstags_Erinnerungs-Programm: Hallo, ich suche nach ner Software, die mich bei jedem PC-Start an die aktuellen Geburtstage erinnert. Was verwendet ihr bzw. was könnt ihr da...
  3. Nachrichtendienst ("WinPopup") via smbclient funktioniert nach Upgrade nicht mehr.

    Nachrichtendienst ("WinPopup") via smbclient funktioniert nach Upgrade nicht mehr.: Dist: Debian_i386@6.0.1_squeeze_stable. Mit meiner alten Version von smbclient "2:3.3.4-1" hat der Nachrichtendienst ("WinPopup" Protokoll)...