Archiv verlassen und diese Seite im Standarddesign anzeigen : kleines shellprogramm
instinct
2006-11-28, 13:32:39
Hallo allerseits, habe ein problem mit einer aufgabe, ich hoffe ihr koennt mir weiterhelfen:
Erzeugen Sie folgende Aussage:
In xx Tagen ist Weihnachten !!!
xx ist auf die heutige Tageszahl bezogen. Das Programm soll an jedem Tag vom 1.1 bis 24.12 funktionieren.
Bisher hab ich herausgefunden:
echo String - gibt ne Zeile aus
date - gibt das aktuelle datum/zeit aus
allerdings habe ich keine ahnung wie ich das nun verbinden soll.
btw. ich bin blutiger anfaenger, was unix/programmieren anbelangt.
ich hoffe ihr könnt mir helfen, ich muss es bis morgen wissen :)
gentoo
2006-11-28, 15:08:41
Ich hoffe es ist keine Hausübung :nono: - ansonsten ;) :
#!/bin/sh
days_since_1_1=`date +%j`
day_at_24_12=`date --date='12/24' +%j`
days_until_christmas=$((day_at_24_12-days_since_1_1))
echo "In $days_until_christmas Tagen ist Weihnachten !!!"
Einfache Version:
#!/bin/ksh
echo $((`date -d '24 Dec' +%j`-`date +%j`))
oder
#!/bin/ksh
echo $((`date -d '12/24' +%j`-`date +%j`))
instinct
2006-11-28, 15:44:10
könntet ihr auch erklaeren was genau ihr da gemacht habt ? bei dem ersten muss man das doch inner datei abspeichern oder ?
gentoo
2006-11-28, 15:48:11
#!/bin/sh # Pfad zum Script-Interpreter
days_since_1_1=`date +%j` #Vergangene Tage seit dem 1.Jänner in variable schreiben
day_at_24_12=`date --date='12/24' +%j` #Vergangene Tage seit 1. Jänner am 24.12 in 2. variable schreiben
days_until_christmas=$((day_at_24_12-days_since_1_1)) # Subtraktion 2er Variablen
echo "In $days_until_christmas Tagen ist Weihnachten !!!" # Ausgabe auf stdout
Du solltest das in einer Datei abspeichern und mit "sh dateiname" aufrufen.
Wenn du keine Datei verwenden willst mach folgendes:
Tipp in der Konsole ein:
echo "In $((`date -d '12/24' +%j`-`date +%j`)) Tagen ist Weihnachten ! "
Einfache Version:
#!/bin/ksh
echo $((`date -d '24 Dec' +%j`-`date +%j`))
date -d '24 Dec' +%j
Nimm mal den Tag 24.Dezember (Option -d) und gibt mir die Tage von diesem Datum ab dem 1.1. aus (Option +%j) (hier heute 358 Tage)
date +%j
Gibt den heutigen Tag als Zahl an (Option +%j) (heute 28.11.2006 = 332.Tag seit dem 1.1.2006)
Also (Quotes bzw. Hochkommatas beachten!!!)
`date -d '24 Dec' +%j`-`date +%j`
entspräche also
358 - 332
Jetzt noch echo drumrum für die Ausgabe, und $(( )) drumrum ist wichtig, damit die Shell an dieser Stelle rechnet und in das echo ausgibt, da es mit einer Subshell gestartet wird! Ohne $(()) wird nicht korrekt evaluiert und gepiped, aber daß ist jetzt zu komplex, um das zu erkären.
instinct
2006-11-28, 17:30:48
funktioniert :)
vielen dank euch beiden, hätt ich wohl alleine net geschafft :/
funktioniert :)
vielen dank euch beiden, hätt ich wohl alleine net geschafft :/
Shell-Programmierung ist sehr mächtig, und ich lerne jedes Mal selbst nach über 15 Jahren Shell-Erfahrung immer wieder was neues dazu.
Ich kann Dir folgendes Buch empfehlen:
Linux-Unix-Shells . Bourne-Shell, Korn-Shell, C-Shell, bash,tcsh (http://www.amazon.de/Linux-Unix-Shells-Bourne-Shell-Korn-Shell-C-Shell-bash/dp/3827315115/sr=8-1/qid=1164731921/ref=sr_1_1/302-3512214-9555267?ie=UTF8&s=books)
Ansonsten immer mit
man befehl
immer die Anwendung und Syntax überprüfen, es kann immer Unterschiede zu den diversen Unix-Plattformen und Umgebungen geben.
Lokadamus
2006-11-28, 19:16:04
mmm...
Ich hab mit Advanced Bash-Scripting Guide (http://tldp.org/LDP/abs/html/) die Sachen angefangen, ist wohl aber eher was für erfahrene Anfänger ;).
vBulletin®, Copyright ©2000-2024, Jelsoft Enterprises Ltd.