[linux-l] Datum in Script verwenden

Volker Grabsch vog at notjusthosting.com
Fr Apr 6 22:40:10 CEST 2007


On Fri, Apr 06, 2007 at 06:15:17AM +0200, Jan-Benedict Glaw wrote:
> > > !/bin/sh
> > > date +%G"-"%m"-"%d"__"%k"-"%M
> > > mkdir ~/Documents/palm/backup/S1
> > > pilot-xfer -e ~/Documents/palm/backup/exclude1.txt -p /dev/pilot -b ~/Documents/palm/backup/$1
> > 
> > So funktioniert das natürlich nicht, schon klar. Wie muss ich das anfangen?
> 
> #!/usr/bin/env sh

Man sollte grundsätzlich vermeiden, die "sh" als Shell zu nehmen.
Das suggeriert nämlich, dass das Script auch in was anderem als
ner Bash läuft, also portabel ist. Besserer Stil, der einen selbst
und andere später vor Ärger bewahrt, ist:

    #!/bin/bash

oder auch:

    #!/usr/bin/env bash

Man sollte erst dann zu "/bin/sh" übergehen, wenn man 100%ig sicher
ist, dass im Script keine "Bashismen" drin sind. (d.h. keine Konstrukte,
die nur in der bash funktionieren)

Ob man nun mit oder ohne "/usr/bin/env" arbeitet, ist relativ egal
und mehr eine Geschmacksfrage als alles andere. Da scheiden sich die
Geister, und gerade bei der Bash ist das ziemlich Wurst. Ich kenne
kein System, bei dem sie nicht über /bin/bash erreichbar wäre, und
sei es nur per Symlink.

Bei anderen Interpretern wie perl oder python hingegen sieht das
anders aus. Da ist grundsätzlich die /usr/bin/env-Variante zu
bevorzugen:

    #!/usr/bin/env python

> ZEIT="`date '+%G-%m-%d__%H-%M`"

Fehler: Ein ' fehlt. Warum nimmt sich keiner die 5 Sekunden Zeit,
sein Zeug mal schnell die in Shell zu kopieren ... *sigh*

Außerdem sind die " überflüssig, wenn dort wirklich nur ein
`...`-Konstrukt steht. Einfacher wäre:

    ZEIT=`date '+%G-%m-%d__%H-%M'`

Oder auch:

    ZEIT=`date "+%G-%m-%d__%H-%M"`

In diesem Fall ist es egal, ob man mit ' oder " quotet. Der
Unterschied macht sich erst bemerkbar, wenn man $-Zeichen
oder Variablen drin haben will.

> EXCLUDE="${HOME}/Documents/palm/backup/exclude1.txt"
> OUTPUTDIR="${HOME}/Documents/palm/backup/${DATE}"

Sehr schön gequotet, obwohl es in diesem Fall auch

    EXCLUDE="$HOME/Documents/palm/backup/exclude1.txt"
    OUTPUTDIR="$HOME/Documents/palm/backup/$DATE"

getan hätte. ;-)
Aber Jan-Benedicts Variante ist auf jeden Fall der bessere
Stil.

> mkdir -- "${OUTPUTDIR}"

Ebenfalls sehr schön gequotet. Das "--" vergessen viele.
Aber Vorsicht: Es ist leider nicht portabel auf Solaris,
wie ich schmerzlich feststellen musste ...


Viele Grüße,

    Volker

-- 
Volker Grabsch
---<<(())>>---
Administrator
NotJustHosting GbR



Mehr Informationen über die Mailingliste linux-l