Beachte: keine Leerzeichen vor "=" und um den String eines Befehls zu bekomen, musste den befehl in $(Befehl) reinstecken. Schreibe Variabeln am besten groß (eigentlich macht man das nur mit Konstanten) oder in camelCase, damit du nicht mit Befehlen in die Quere kommst.Code:DATE=$(date +%d)
oderCode:let DATE=29-$DATE
würde das zweite sein. Da musst du " und nicht ' verwenden, weil in ' die Variable $DATE nicht expandiert wird - oder am besten gar keine Leerzeichen.Code:let DATE="29 - $DATE"
Ich würde das übrigens so machen (ist ja nicht viel)
Code:echo "$(( 29 - $(date +%d) )) Text"
Ergebnis 1 bis 10 von 18
- 16.04.2010, 18:04 #1Jonathan
Themenstarter
- Registriert
- 10.2009
- Beiträge
- 81
Einfaches Shellscripting
Hallo!
Ich hatte noch nie mit Shell zu tun. Nun bringt mich Geektol dazu doch ein wenig umexperementieren zu wollen.
Wenn ich das richtig interpretiere werden Variablen zwar deklariert/initialisiert indem man einfach ihren namen = wert schreibt, wenn man sie aber irgendwo verwenden möchte benötige ich grundsätzlich $name oder?
Im ersten Schritt möchte ich einfach nur (29 - (date +%d)) mit einem Text ausgeben.. Ich habs so versucht, bekomme aber keine Ausgabe:
das let hatte ich nicht von Beginn an, wenn ich richtig gegooglet habe, benötigt man das aber grundsätzlich bei Rechnungen, oder?Code:date = date +%d let date = 29 - $date echo $date ' Text'
Das in meinem Fallbeispiel die Zahl negativ werden kann, ist mir erstmal egal (;
Ich bin mir auch nicht so ganz im klaren wonach ich googlen muss. Laut Apple Dev und Wiki gibt es mehrere Arten von Shell (zB Bash) aber in dem Manuskript von Apple steht nicht ausdrücklich, welches das nativ Genutzte ist óo
Edit:
Zweiter Versuch ohne Ausgabe
Code:#!/bin/sh declare -i vdate='date +%d' vtest = $((29 - $vdate)) echo $vtest
Geändert von Suven (16.04.2010 um 18:44 Uhr)
- 16.04.2010, 18:53 #2The cause of the problem is:
Don't worry; it's been deprecated.
The new one is worse.
- 16.04.2010, 18:59 #3
Ich seh grad, dass du im script #!/bin/sh benutzt hast.
Nimm besser #!/bin/bash. Die sollte zwar standardmäßig die default shell sein, aber falls es doch die c-shell ist, wird das obere nicht funktionieren.The cause of the problem is:
Don't worry; it's been deprecated.
The new one is worse.
- 16.04.2010, 19:17 #4Jonathan
Themenstarter
- Registriert
- 10.2009
- Beiträge
- 81
Cool danke!
Das funktioniert 1:1 so wie du es gepostet hast. Und deine Erklärung mit den Spaces wird mir auch in Zukunft helfen. Wusste nicht das die Syntax so penibel ist.
- 16.04.2010, 19:25 #5
Kein ding!
FYI: Shell proramming syntax ist total zickig!
Das z.b.
würde nicht gehen. Da fehlen jetzt die Leerzeichen.Code:echo "$((29-$(date +%d))) Text"
Gute Quelle zum Lernen von bash(!) Programming findest du übrigens hier:
http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html
Und wenn du da durch bist, ziehst dir das rein:
http://tldp.org/LDP/abs/html/
The cause of the problem is:
Don't worry; it's been deprecated.
The new one is worse.
- 16.04.2010, 20:18 #6
Keine Panik.
Wenn du mal so weit bist das hier zu verstehen (und darüber schmunzeln zu können
), bist du "voll fit".
(Just for fun.Code:X='X=%s;printf "$X" "\x27$X\x27"\n';printf "$X" "'$X'"
)
- 16.04.2010, 20:27 #7
^^
lolThe cause of the problem is:
Don't worry; it's been deprecated.
The new one is worse.
- 17.04.2010, 17:53 #8
Hi,
ich will ja nix sagen, aber das unix date kann soooooo viel...
date -v-29d "+%d"
bringt das Datum von vor 29 Tagen und davon nur den Tag (%d). Ich geh mal davon aus, das der Sinn hinter $date - 29 ist, bzw. 29 - $date.
und mydate=$(date -v-29d "+%d") schreibt das ganze nach $mydate.
Das GNU date würde das übrigens so machen: mydate=$(date --date="29 days ago" "+%d")
cu
- 17.04.2010, 20:09 #9
Viele Wege führen nach Rom

Du hast aber vollkommen Recht.
Den Vorteil an meiner Lösung sehe ich in der Portierbarkeit. Funzt auf Linux & auf Mac bzw. BSD.
BTW: Korrigier mich, falls ich falsch liege, aber ist es nicht das BSD-Date, was das ermöglicht?The cause of the problem is:
Don't worry; it's been deprecated.
The new one is worse.
- 17.04.2010, 20:41 #10
Hallo,
also laut den manuals ist:
date -v-29d "+%d" der Mac OS X (*BSE) way of life:
http://developer.apple.com/mac/libra...n1/date.1.html
und
date --date="29 days ago" "+%d" der GNU (nicht Linux!) Weg
http://www.gnu.org/software/coreutil...ate-invocation
cu


Zitieren
