Variable nach Scriptausführung speichern

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von oyster-manu, 28.07.2009.

  1. #1 oyster-manu, 28.07.2009
    oyster-manu

    oyster-manu toast

    Dabei seit:
    26.06.2003
    Beiträge:
    1.055
    Zustimmungen:
    0
    Hallo.

    Ich will den Wert der Variable NEW_X mit der Wert der Variablen OLD_X vergleichen. Beim ersten Skriptaufruf wird NEW_X der selbe Wert wie OLD_X zugewiesen. Beim zweiten Aufruf des Skripts wird der Wert von NEW_X geändert und soll nun mit OLD_X verglichen werden.

    Meine erste Idee ist, die Variablen NEW_X und OLD_X zu exportieren damit die Werte nicht verloren gehen. Allerdings habe ich dann zwei Variablen auf die ich systemweit zugreifen kann, was etwas übertrieben ist (ich brauche sie ja nur für dieses Skript).
     
  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. #2 bytepool, 28.07.2009
    Zuletzt bearbeitet: 28.07.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    wie waer's mit einfach in eine Datei schreiben? Je nachdem wie lange du den Wert behalten willst z.B. unter /tmp oder /var/tmp?

    Edit:
    Nebenbei, mit "export" machst du eine Variable nicht systemweit lesbar, sondern sorgst nur dafuer dass die Variable an alle gestarteten Sub-Shells weitergegeben wird. Vielleicht meintest du das ja auch.

    mfg,
    bytepool
     
  4. #3 oyster-manu, 29.07.2009
    oyster-manu

    oyster-manu toast

    Dabei seit:
    26.06.2003
    Beiträge:
    1.055
    Zustimmungen:
    0
    Andere Möglichkeiten als eine externe Datei anzulegen gibts nicht?

    Zu "export": also würde ich auf die Variable nicht mehr zugreifen können, wenn ich das Skript öfter mit cron ausführe?
     
  5. #4 saeckereier, 29.07.2009
    saeckereier

    saeckereier Graue Eminenz

    Dabei seit:
    08.05.2005
    Beiträge:
    1.920
    Zustimmungen:
    0
    Ort:
    Im schönen Norden
    Nein, andere Möglichkeiten ausser die Daten extern abzulegen gibt es nicht. Muss nicht unbedingt eine Datei sein, ist aber das einfachste. Auch export würde so nicht funktionieren (s.o.)
     
  6. #5 oyster-manu, 29.07.2009
    oyster-manu

    oyster-manu toast

    Dabei seit:
    26.06.2003
    Beiträge:
    1.055
    Zustimmungen:
    0
    Ich nehm auch kompliziertere Lösungen entgegen :)
     
  7. #6 saeckereier, 30.07.2009
    saeckereier

    saeckereier Graue Eminenz

    Dabei seit:
    08.05.2005
    Beiträge:
    1.920
    Zustimmungen:
    0
    Ort:
    Im schönen Norden
    Komplizierter wäre das ganze in einer Datenbank zu speichern, LDAP, etc.. Irgendwas zum Persistieren wirst du brauchen. Datei ist das einfachste und das würde ich auch so machen.

    Frage: Wozu das ganze?
     
  8. #7 tuxlover, 30.07.2009
    tuxlover

    tuxlover Der den Tux knuddelt

    Dabei seit:
    26.10.2005
    Beiträge:
    2.106
    Zustimmungen:
    0
    Ort:
    berlin
    das würde mich auch mal interessieren. wieso muss das script zweimal mit verschiedenen werten aufgerufen werden.

    du könntest ${NEW_X:=Wert1} verwenden. und dann das script mittels export NEW_X=wert2 beim zweitern druchlauf starten. beim ersten durchlauf ohne export starten, dann wird wert1 benutzt. aber so richtig kapier ich nicht was das soll.
     
  9. #8 oyster-manu, 31.07.2009
    oyster-manu

    oyster-manu toast

    Dabei seit:
    26.06.2003
    Beiträge:
    1.055
    Zustimmungen:
    0
    Konkret sieht mein Problem so aus:

    Code:
    #!/bin/bash
    
    ## checks the external IP of your system by using cURL
    
    FILE="${HOME}/.EXTERNAL_IPs.log"
    BACKUP_FILE="${HOME}/.EXTERNAL_IPs.log.bak"
    
    CURL_PATH=$(echo -n `which curl` -s)
    
    DATE=$(date +%Y.%m.%d)
    TIME=$(date +%H:%M:%S)
    
    # where to get the external IP from
    URL="http://checkip.dyndns.org/"
    
    #get the IP from the web
    IP=$(${CURL_PATH} ${URL} | grep Address | cut -c19-)
    
    LAST_IP=$IP
    
    # format the output
    OUTPUT=$(echo -e "${DATE}\t${TIME}\t${IP}")
    
    # create files if they don't exist
    if [ ! -f ${FILE} ]; then
    	touch ${FILE}
    	touch ${BACKUP_FILE}
    	echo -e "# This log-file is created by the script log_my_ip.sh" >> ${FILE}
    	echo -e "# Date\t\tTime\t\tIP-Address\n" >> ${FILE}
    	echo -e "# This log-file is created by the script log_my_ip.sh." >> ${BACKUP_FILE}
    	echo -e "# Date\t\tTime\t\tIP-Address\n" >> ${BACKUP_FILE}
    fi
    
    # print date, time and IP to log-file
    if [ ! -z ${IP} ]; then  # are you online?
    	if [ "${IP}" != "${LAST_IP}" ]; then # is it a new IP?
    		echo -e "${OUTPUT}" >> ${FILE}
    		echo -e "${OUTPUT}" >> ${BACKUP_FILE}
    	fi
    fi
    exit 0
    
    Das Skript speichert IPs in einem Log mit Datum- und Zeitstempel. Wenn die neue IP gleich der alten ist, soll kein neuer Eintrag in den log erfolgen. Das Skript funktioniert wie es hier angegeben wurde natürlich nicht, da LAST_IP = IP gesetzt wurde. Das muss ich noch ändern.
    Das Skript wird jede Minute per cron ausgeführt, daher muss ich die LAST_IP irgendwo speichern um sie beim erneuten ausführen mit der neuen IP vergleichen zu können.

    PS: Das Skript ist hier entstanden: http://www.unixboard.de/vb3/showthread.php?t=43458
     
  10. #9 floyd62, 31.07.2009
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    Du kannst doch die letzte IP-Adresse aus deinem Logfile holen, etwa so
    Code:
    LAST_IP=$(tail -1 $FILE | sed -e 's/.*\t//')
    
    oder einfach prüfen, ob die aktuelle Adresse schon als letzte drin steht, d.h. statt der Prüfung, ob $IP = $LAST_IP ist, checken, ob
    Code:
    if tail -1 $FILE | grep "    $IP$" >/dev/null; then
    
    (TAB vor dem $IP) ...
     
  11. #10 saeckereier, 31.07.2009
    saeckereier

    saeckereier Graue Eminenz

    Dabei seit:
    08.05.2005
    Beiträge:
    1.920
    Zustimmungen:
    0
    Ort:
    Im schönen Norden
    Pfft... Viel einfacher:
    Endlosschleife und sleep. Dann hast du halt eine Art Bash-Demon. (Du müsstest dann natürlich das Skript in den Hintergrund starten. Fertig. Evtl. noch per cron regelmäßig prüfen, ob es noch aktiv ist.
     
  12. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  13. #11 floyd62, 31.07.2009
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    Naja, ob es wirklich "viel einfacher ist", eine Endlosschleife mit sleep, ein Startskript und einen cron-Job aufzusetzen, der prüft, ob die Endlosschleife nicht schon geendet hat, anstatt eine Zeile anzupassen, um Daten aus einer Datei zu lesen, die sowieso geschrieben werden soll, hängt m.E. doch stark davon ab, wie man "einfach" definiert ;)

    Aber nichts für ungut ...
     
  14. #12 saeckereier, 31.07.2009
    saeckereier

    saeckereier Graue Eminenz

    Dabei seit:
    08.05.2005
    Beiträge:
    1.920
    Zustimmungen:
    0
    Ort:
    Im schönen Norden
    *g*
    Nee, das nicht. Muss man aber auch mal gemacht haben. :-) Naja in der Minimalkonfiguration Endlosschleife ist's schon einfacher.
     
Thema:

Variable nach Scriptausführung speichern

Die Seite wird geladen...

Variable nach Scriptausführung speichern - Ähnliche Themen

  1. Nach Variable fragen wenn die nicht als Parameter eingegeben wurde

    Nach Variable fragen wenn die nicht als Parameter eingegeben wurde: Hallo, wie man aus dem Titel entnehmen kann, möchte ich dass man nach Argument gefragt wird, wenn man keinen eingetippt hat. zB ----------...
  2. Textstring nach muster durchsuchen und in Variable speichern

    Textstring nach muster durchsuchen und in Variable speichern: Hallo, habe ein "kleines" Problem! ps -ef | grep mysql | grep GroupLabel | grep -v grep liefert: root 4298 1 0 Nov13 ? 00:00:00...
  3. Nach Muster in Datei suchen und durch Variable ersetzen

    Nach Muster in Datei suchen und durch Variable ersetzen: Hallo, ich bekomme es einfach nicht hin, ich will in meinem Script eine Datei durchsuchen nach ${xxxxx} und die dann durch eine Variable mit dem...
  4. variable von einem script zum nächsten übergeben

    variable von einem script zum nächsten übergeben: ich versuche gerade ein script zu basteln dass mehrere unterscripte anschmeisst. dabei wollte ich aber im ersten script alle variablen...
  5. string.split() nach variabler anzahl an leerzeichen

    string.split() nach variabler anzahl an leerzeichen: hallo leute.. ja dumme frau sucht schnelle antwort. ich hab ein kleines problem mit der funktion string.split(). und zwar möchte ich die...