PDA

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 !!!"

PHuV
2006-11-28, 15:18:14
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 ! "

PHuV
2006-11-28, 16:06:25
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 :/

PHuV
2006-11-28, 17:40:57
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 ;).