Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 18
  1. #1
    Jonathan
    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:

    Code:
    date = date +%d
    let date = 29 - $date
    
    echo $date ' Text'
    das let hatte ich nicht von Beginn an, wenn ich richtig gegooglet habe, benötigt man das aber grundsätzlich bei Rechnungen, oder?

    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)

  2. #2
    Galloway Pepping Avatar von fyysh
    Registriert
    01.2010
    Ort
    Rheinknie
    Alter
    33
    Beiträge
    1.348
    Code:
    DATE=$(date +%d)
    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:
    let DATE=29-$DATE
    oder
    Code:
    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.



    Ich würde das übrigens so machen (ist ja nicht viel)
    Code:
    echo "$(( 29 - $(date +%d) ))   Text"
    The cause of the problem is:
    Don't worry; it's been deprecated.
    The new one is worse.

  3. #3
    Galloway Pepping Avatar von fyysh
    Registriert
    01.2010
    Ort
    Rheinknie
    Alter
    33
    Beiträge
    1.348
    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.

  4. #4
    Jonathan
    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.

  5. #5
    Galloway Pepping Avatar von fyysh
    Registriert
    01.2010
    Ort
    Rheinknie
    Alter
    33
    Beiträge
    1.348
    Kein ding!

    FYI: Shell proramming syntax ist total zickig!
    Das z.b.
    Code:
    echo "$((29-$(date +%d)))   Text"
    würde nicht gehen. Da fehlen jetzt die Leerzeichen.

    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.

  6. #6
    Charlamowsky Avatar von Rastafari
    Registriert
    03.2005
    Beiträge
    12.959
    Keine Panik.
    Wenn du mal so weit bist das hier zu verstehen (und darüber schmunzeln zu können ), bist du "voll fit".
    Code:
    X='X=%s;printf "$X" "\x27$X\x27"\n';printf "$X" "'$X'"
    (Just for fun. )

  7. #7
    Galloway Pepping Avatar von fyysh
    Registriert
    01.2010
    Ort
    Rheinknie
    Alter
    33
    Beiträge
    1.348
    ^^
    lol
    The cause of the problem is:
    Don't worry; it's been deprecated.
    The new one is worse.

  8. #8
    Rhode Island Greening Avatar von Steinchen
    Registriert
    04.2010
    Ort
    Saarland
    Beiträge
    472
    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

  9. #9
    Galloway Pepping Avatar von fyysh
    Registriert
    01.2010
    Ort
    Rheinknie
    Alter
    33
    Beiträge
    1.348
    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.

  10. #10
    Rhode Island Greening Avatar von Steinchen
    Registriert
    04.2010
    Ort
    Saarland
    Beiträge
    472
    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

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •