littlebunny87 Geschrieben 15. Januar 2009 Geschrieben 15. Januar 2009 (bearbeitet) Guten Morgen, ich habe im Moment ein Projekt, bei dem ich ein csh Skript schreiben soll, dass gewisse Zahlen ausliest und ändert. Dazu wollte ich in einer if-Anweisung einen Vergleich amchen, aber ich bekomme leider immer eine Fehlermeldung und hoffe, dass mir jemand von euch sagen kann, wo mein Fehler liegt. Hier der Code meiner if-Anweisung: # wenn neues gleich altes Datum if [ $OLDDAT == $CURDAT ] ; then # neue Nummer gleich alte Nummer Plus 1 NEWNUM = `expr $OLDNUM + 1 | cut -c 9-` echo $NEWNUM # wenn neues ungleich altes Datum else # neue Nummer gleich 00 NEWNUM = "00" echo $NEWNUM fi Fehlermeldung: if: Expression Syntax. Ich denke, dass es sich um die erste Zeile if [ $OLDDAT == $CURDAT ] ; then handelt. das da iwo ein Fehler mit dem Vergleich oder so vorliegt Bearbeitet 15. Januar 2009 von littlebunny87 Zitieren
LadyPreis Geschrieben 15. Januar 2009 Geschrieben 15. Januar 2009 ohne jetzt sehr bewandert in shell-Programmierung zu sein, würde ich auf das Semikolon tippen http://www.uni-muenster.de/ZIV.MathiasGrote/linux/Prog.html Zitieren
littlebunny87 Geschrieben 15. Januar 2009 Autor Geschrieben 15. Januar 2009 das hab ich schon weggelassen und hatte trotzdem den selben Fehler Zitieren
bigvic Geschrieben 15. Januar 2009 Geschrieben 15. Januar 2009 Hi, ich arbeite nie mit der csh und hab auch keine grad zur Hand, aber die sagen ... Shell Scripts csh ... das es bei einer If-Anweisung runde Klammern benötigt. Schon probiert? ciao, vic Zitieren
littlebunny87 Geschrieben 15. Januar 2009 Autor Geschrieben 15. Januar 2009 (bearbeitet) super, das funktioniert jetzt soweit, danke. (zum schluss muss auch ein endif und kein fi hin) nun hat er nur noch probleme mit meinem NEWNUM und NEWNUM2. kann mir da vielleciht noch wer weiterhelfen? Bearbeitet 15. Januar 2009 von littlebunny87 Zitieren
bigvic Geschrieben 15. Januar 2009 Geschrieben 15. Januar 2009 nun hat er nur noch probleme mit meinem NEWNUM und NEWNUM2. kann mir da vielleciht noch wer weiterhelfen? welche willst du nicht verraten? Zitieren
littlebunny87 Geschrieben 15. Januar 2009 Autor Geschrieben 15. Januar 2009 Das komplette programm sieht so aus: #!/bin/csh set DATEINAME = test123.txt # aktuelles Datum set CURDAT = "`date '+%Y%m%d'`" echo $CURDAT # gesamte alte Zahlenkette set OLDNUM = `cat $DATEINAME | grep 20 | awk '{print $1}'` echo $OLDNUM # altes Datum set OLDDAT = `echo $OLDNUM | cut -c -8` echo $OLDDAT # wenn neues gleich altes Datum if ( $OLDDAT == $CURDAT ) then # neue Nummer gleich alte Nummer Plus 1 NEWNUM = `expr $OLDNUM + 1 | cut -c 9-` echo $NEWNUM # wenn neues ungleich altes Datum else # neue Nummer gleich 00 NEWNUM = "00" echo $NEWNUM endif # ersetze cat test123.txt | sed "s/20......../$CURDAT$NEWNUM/" > test123.txt Fehler: NEWNUM: Command not found NEWNUM: Undefined Variable Muss ich die schon vor der if-Anweisung definieren? und wenn ja, wie? Würde ja heißen ich brauch ne NEWNUM und ne NEWNUM2. Und wie rufe ich die dann in der if-Anweisung auf? Zitieren
bigvic Geschrieben 15. Januar 2009 Geschrieben 15. Januar 2009 Muss ich die schon vor der if-Anweisung definieren? und wenn ja, wie? Würde ja heißen ich brauch ne NEWNUM und ne NEWNUM2. Und wie rufe ich die dann in der if-Anweisung auf? Prinzipiell würde ich anderst scripten. Immer ein Stückchen und dann schauen, ob es geht und dann weiter machen. Ansonsten macht debugging kein Spass. Zu deinem Problem ... muss man nicht die Variable mit "set" vorher definieren? Hast du das gemacht bei NEWNUM? Zitieren
littlebunny87 Geschrieben 15. Januar 2009 Autor Geschrieben 15. Januar 2009 pass auf, wenn ich die Variable vor der if Anweisung deklariere und ihr die werte zuweise, wie rufe ich das dann in der ifschleife auf? Zitieren
bigvic Geschrieben 15. Januar 2009 Geschrieben 15. Januar 2009 #!/bin/csh set DATEINAME = test123.txt # aktuelles Datum set CURDAT = "`date '+%Y%m%d'`" echo $CURDAT # gesamte alte Zahlenkette set OLDNUM = `cat $DATEINAME | grep 20 | awk '{print $1}'` echo $OLDNUM # altes Datum set OLDDAT = `echo $OLDNUM | cut -c -8` echo $OLDDAT set NEWNUM = "00" # wenn neues gleich altes Datum if ( $OLDDAT == $CURDAT ) then # neue Nummer gleich alte Nummer Plus 1 NEWNUM = `expr $OLDNUM + 1 | cut -c 9-` endif echo $NEWNUM # ersetze cat test123.txt | sed "s/20......../$CURDAT$NEWNUM/" > test123.txt Geht das so nicht? Und was ist eine If-Schleife? Zitieren
littlebunny87 Geschrieben 15. Januar 2009 Autor Geschrieben 15. Januar 2009 sry, meinte if-Anweisung ähm... da überspringt er anscheinend iwie die if-Anweisung. zumindest macht er net das was drinne steht Zitieren
michaelmeier Geschrieben 15. Januar 2009 Geschrieben 15. Januar 2009 Hi, warum nicht mit let? zahl=0 let zahl=$zahl+1 echo $zahl -> 1 Zitieren
littlebunny87 Geschrieben 15. Januar 2009 Autor Geschrieben 15. Januar 2009 weil 1. die zahl 2stellig sein muss und 2. brauche ich 2 verschiedene Fälle für das ganze Zitieren
Agnes Geschrieben 19. Januar 2010 Geschrieben 19. Januar 2010 ich arbeite auf einer kornshell und habe das problem, dass ich mehrere anweisungen nicht in ein if bzw. then packen kann, das rafft der nicht. beispiel: if [ "$errors" = 0 ]; then print "$timestamp : Alle Systeme verfügbar" >> $OUTPUT_FILE2 elif [ "$errors" > 0 ]; then print "$errors2" >> $ERROR_FILE print "$timestamp : Nicht alle Systeme verfügbar" >> $OUTPUT_FILE2 fi der führt das zweite print immer aus. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.