[Unix]: Variable mit Datum in Shellscript

Von: , Frage gestellt am Di, 25. Jun 2002

Hallo

Ich hab ein Unix-Script unter Compaq Tru64 wo ich folgendes mache:

#Anfang
#!/bin/ksh

# Das profile muss ich laden, da mir sonst einige sachen fehlen.
. /usr/users/oracle/.profile

DatAnf=$(date +%d-%b-%Y)
ZeitAnf=$(date +%H:%M:%S)

Hier läuft z.B ein FTP....

DatEnd=$(date +%d-%b-%Y)
ZeitEnd=$(date +%H:%M:%S)
echo "$DatAnf $ZeitAnf@$DatEnd $ZeitEnd@Text@" > /temp/file.txt
#Ende vom script

Nun bekomm ich aber wenn ich das Script über crontab laufen lasse immer folgenden Fehler:
Fehler in Zeile 30 'DatAnf=$' unexpected

Was soll das? Wenn ich das script mit
. x_test
starte geht alles problemlos.

im crontab steht folgendes:
15 3 * * 1-6 /usr/users/oracle/x_test > /dev/null

Wieso ist das so? Berechtigungen auf den Files sollten meiner Meinung nach richtig eingestellt sein.

Vielen Dank für Hinweise

Gruss
Marc

5 Antworten zu dieser Frage

  1. Antwort von nach 30 Minuten 0 hilfreich
    Re: [Unix]: Variable mit Datum in Shellscript

    Hallo Marc,

    ich kenne zwar die Besonderheiten der ksh nicht aber bei mir würden die folgenden Zeilen so aussehen: DatAnf=$(date +%d-%b-%Y)
    ZeitAnf=$(date +%H:%M:%S)
    DatAnf=`date +%d-%b-%Y`
    ZeitAnf=`date +%H:%M:%S`

    Grüße
    Martin

    • Antwort von nach 9 Stunden 0 hilfreich
      Re^2: [Unix]: Variable mit Datum in Shellscript

      Hallo Martin

      Zuerst mal Dank für die Antwort, aber unter ksh will das irgendwie nicht so recht. D.h. wenn ich es nach Deinem Vorschlag mache, habe ich nachher in der Variable folgenden Inhalt:
      date +%d-%b-%Y
      Ich bräuchte aber das Datum als Datum dort drin. :-)

      Gruss
      Marc [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

      • Antwort von nach einem Tag 0 hilfreich
        Re^3: [Unix]: Variable mit Datum in Shellscript

        Zuerst mal Dank für die Antwort, aber unter ksh will das
        irgendwie nicht so recht. D.h. wenn ich es nach Deinem
        Vorschlag mache, habe ich nachher in der Variable folgenden
        Inhalt:
        date +%d-%b-%Y
        Ich bräuchte aber das Datum als Datum dort drin. :-)
        Aufpassen. Du musst schon die Backticks nehmen. Der Backtick findet sich direkt links neben der Backspacetaste (genau, die französischen Dinger) und du nimmst den oberen (also die Shift-Taste drücken).

        Ich muss das so umständlich erklären, weil ich keine Ahnung habe, wie man accong ägü schreibt :-)

        Also, wie es schon Martin schrieb:

        DatAnf=`date +%d-%b-%Y`

        und nicht, wie du es möglicherweise getippert hast:

        DatAnf='date +%d-%b-%Y'

        Martins Schreibweise ruft nämlich den Befehl date auf, der den Rückgabewert des Befehls in die Variable schreibt. Die zweite Schreibweise mit den einfachen Ticks (die über dem #) schreibt den Wert, der zwischen ihnen steht, in die Variable.

        Stefan

  2. Antwort von nach 10 Stunden 0 hilfreich
    Re: [Unix]: Variable mit Datum in Shellscript

    Hallo Marc,

    meiner Meinung nach ist ist die Syntax usw. im Script richtig (deshalb läuft es ja auch bei interaktivem Aufruf). Wenn ein Script über Cron gestartet wird, hat es aber nicht dieselbe Umgebung (Umgebungsvariablen, z.B. PATH). Enventuell mußt du nur deine Umgebungsvariablen aus .profile oder .bashrc (woher auch immer) geeignet setzen.

    Probiers mal, indem du den kompletten Pfad von 'date' einsetzt, also z.B.

    start_time=$(/usr/bin/date +"Formatstring...")

    dann klappts auch mit dem Nachbarn...

    Gruß
    Bernhard

  3. Antwort von nach 10 Stunden 1 hilfreich
    Re: [Unix]: Variable mit Datum in Shellscript

    Hallo Marc, #Anfang
    #!/bin/ksh
    ... DatAnf=$(date +%d-%b-%Y)
    ZeitAnf=$(date +%H:%M:%S)
    ... Nun bekomm ich aber wenn ich das Script über crontab laufen
    lasse immer folgenden Fehler:
    Fehler in Zeile 30 'DatAnf=$' unexpected

    Was soll das? Wenn ich das script mit
    . x_test
    starte geht alles problemlos.
    Ob Du für die Kommandosubstituion Backticks oder Dollar/Klammer benutzt sollte laut manpage wurscht sein.

    Command substitution allows the output of a command to be substituted in place of the command name itself. Command substitution occurs when the command is enclosed as follows:
    $(command)
    or (backquoted version):
    `command`
    


    Aber wieso benutzt Du die ksh hierfür?
    Im Beispiel kann ich nicht erkennen, wofür die gut sein soll.
    Probier es doch mal spaßeshalber mit der bash.

    Gruß
    Andreas

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!