Scp-Skript meldet Fehler

M

mr-sansibar

Jungspund
Hallo !
Ich habe ein skript geschrieben der von einem server auf den anderen server was transferiert.
aber komischerweise kommt hin und wieder eine Fehlermeldung:

(10 - 09: value too great for base (error token is "09")

nach mehrmaligen ausführen klappt es dann

Code:
#!/usr/bin/bash



tageszeit=$(TZ=$(date +%Z)+$((24*1 - ($(date +%H) - $(date -u +%H)) )) date +"%Y%m%d")
for d in /all_logs/logger/*; do
test -d "$d" || continue
echo $tageszeit
server1:/y/y/y/y/.
scp $d/*appl_logs*$tageszeit*.tar server2:/ora_x/x/x/x/.
done
 
Hallo
Was du da mit date machst ist recht seltsam. ;)
Genau hier liegt der Fehler.
Wenn bei der Uhrzeit 09 rauskommt, kann die Shell das nicht arithmetisch verarbeiten. Die Shell rechnet nur mit ganzen Zahlen ohne Vornullen!

Aber was willst du mit dieser Datumsberechnung?

Gruß Wolfgang
 
Hallo
Was du da mit date machst ist recht seltsam. ;)
Genau hier liegt der Fehler.
Wenn bei der Uhrzeit 09 rauskommt, kann die Shell das nicht arithmetisch verarbeiten. Die Shell rechnet nur mit ganzen Zahlen ohne Vornullen!

Aber was willst du mit dieser Datumsberechnung?

Gruß Wolfgang


ich will von der unix system datum - 1 machen.

(08.01.2008) -1
 
Das geht aber einfacher wenn du GNU date verwendest:
Code:
gestern=$(date -d"yesterday" +%d%m%Y);
echo $gestern
07012008

Spart die Rechnerei. ;)

Gruß Wolfgang
 
Das geht aber einfacher wenn du GNU date verwendest:
Code:
gestern=$(date -d"yesterday" +%d%m%Y);
echo $gestern
07012008

Spart die Rechnerei. ;)

Gruß Wolfgang

danke, aber
yesterday wird nicht erkannt !

was ist genau GNU.
habe leider mit shell-skripting nicht soviel erfahrung !
 
Zu GNU!
Welche bash bzw welches date hast du?
Code:
$ date --version
date (GNU coreutils) 5.97

Code:
$ date -d"1 day ago"
Mo 7. Jan 15:02:12 CET 2008
wolle@Nietzsche:~/cache
$ date -d"1 day ago" +%j
007
 
Zu GNU!
Welche bash bzw welches date hast du?
Code:
$ date --version
date (GNU coreutils) 5.97

Code:
$ date -d"1 day ago"
Mo 7. Jan 15:02:12 CET 2008
wolle@Nietzsche:~/cache
$ date -d"1 day ago" +%j
007


bekomme fehermeldung:

-bash-3.00$ $ date --version
-bash: $: command not found
 
Code:
-bash-3.00$ [B][COLOR="Red"]$[/COLOR][/B] date --version
-bash: $: command not found

*LOL*

Das ganze ohne den $ am Anfang.
 
Was meinst du mit bashmodus?
Einfach eine shell öffnen
dort eingeben:
Code:
date --version
BTW Ich habe oben nur meine Shell Zitiert!
 
Was meinst du mit bashmodus?
Einfach eine shell öffnen
dort eingeben:
Code:
date --version
BTW Ich habe oben nur meine Shell Zitiert!

sorrry !

-bash-3.00$ date --version
date: illegal option -- version
usage: date [-u] mmddHHMM[[cc]yy][.SS]
date [-u] [+format]
date -a [-]sss[.fff]
 
Also dann lies dir mal das durch
Oder ich frage direkt auch hier wieder mal:
Von welchem OS reden wir?

Die Manpage zu deinem date gibt dir übrigens auch Auskunft, ob es -d gibt, eventuell sogar über die Version.
 
Also dann lies dir mal das durch
Oder ich frage direkt auch hier wieder mal:
Von welchem OS reden wir?

Die Manpage zu deinem date gibt dir übrigens auch Auskunft, ob es -d gibt, eventuell sogar über die Version.

OS: Solaris 10

und die option -d gibt es nicht, laut meiner Manpage !
 
Schön, dass wir schon im 13 Beitrag erfahren über was wir reden.

Ich habe hier kein Solaris zur Hand.
Aber wenn du nicht die Möglichkeit hast dir das GNU date zu installieren, dann musst du eben rechnen.
Nur musst du die Vornullen vor der Berechnung entfernen.
Z.B. indem du den Tag einzeln ermittelst und dann die 0 (Null) entfernst bevor du 1 abziehst.
 
Schön, dass wir schon im 13 Beitrag erfahren über was wir reden.

Ich habe hier kein Solaris zur Hand.
Aber wenn du nicht die Möglichkeit hast dir das GNU date zu installieren, dann musst du eben rechnen.
Nur musst du die Vornullen vor der Berechnung entfernen.
Z.B. indem du den Tag einzeln ermittelst und dann die 0 (Null) entfernst bevor du 1 abziehst.

vielen dank !
GNU date kann ich leider nicht installieren.
dann muss ich eben auf dein hinweiss zurück greifen.

vg, mr-sansibar
 
Da du bash nutzt, kannst du auf Varaiablenexpansion zurückgreifen.
Beispiel
Code:
a=09;
b=${a#0};
echo $b
9

Gruß Wolfgang
 
Zuletzt bearbeitet:
Habe es nochmal geänder, da du mit der zweiten Variante auch nicht prüfen musst, ob die Zahl kleiner 10 ist.
Also
Code:
wolle@Nietzsche:/mnt/sda5/
$ a=10; echo ${a#0}
10
wolle@Nietzsche:/mnt/sda5/
$ a=10; echo ${a/0/}
1

Gruß
 
Habe es nochmal geänder, da du mit der zweiten Variante auch nicht prüfen musst, ob die Zahl kleiner 10 ist.
Also
Code:
wolle@Nietzsche:/mnt/sda5/
$ a=10; echo ${a#0}
10
wolle@Nietzsche:/mnt/sda5/
$ a=10; echo ${a/0/}
1

Gruß


nochmals danke
 

Ähnliche Themen

Last mit etc/passwd anzeigen lassen

NagiosGrapher 1.7.1 funktioniert nicht

dovecot und postfix Konfiguration Problem

Displayport + externer Monitor zeigt bei startx nichts erst bei DVI

Ubuntu X / dbus problem

Zurück
Oben