#!/bin/sh: Variablen-Zuweisung mit Default-Werten

Datumsansicht Baumansicht Betreffansicht Attachement-Sicht

From: Raphael H. Becker (beckerra_at_rumms.uni-mannheim.de)
Date: 17. Jan 2001


Hallo,

hab hier ein kleines Problem, bei dem mir irgendwie das Verstanednis der
manpage fehlt:

ich moechte folgendes erreichen:
in einen Shellscript sollen die Parameter $1 und $2 an scriptinterne
Variablen zugewiesen werden. Falls $1 und $2 nicht gesetzt sind, dann
sollen default-Werte verwendet werden.

Umstaendlich koennte man das so machen:

if [ $1 ]
then
  VAR=$1
else
  VAR="defaultwert"
fi

Laut "man 1 bash" soll das aber auch so gehen:

.---------------------------------------------------------------------
| ${parameter:-word}
| Use Default Values. If parameter is unset or null,
| the expansion of word is substituted. Otherwise,
| the value of parameter is substituted.
| ${parameter:=word}
| Assign Default Values. If parameter is unset or
| null, the expansion of word is assigned to parame­
| ter. The value of parameter is then substituted.
| Positional parameters and special parameters may
| not be assigned to in this way.
`---------------------------------------------------------------------

Wobei das dann (meinem verstaendnis nach) so aussehen muesste:

VAR=${$1:-"defaultwert"}
VAR wird dann (falls gesetzt oder nicht "") $1 zuegwiesen, anderenfalls
"defaultwert".

Der zweite Fall sieht so aus:
VAR=${$VAR1:="defaultwert"}, wobei VAR=$VAR1, falls VAR1 gesetzt und
nicht leer oder VAR1="defaultwert"; VAR=$VAR1 (also zunaechst wird die
fragliche Variable initialisiert, insgesamt hat der Ausdruck dann den
defaultwert.

Da man $1 keinen Wert zuweisen kann (oder doch??) kommt wohl nur Version
1 in Frage.

Im konkreten Fall habe ich damit aber irgendein Problem:
.---------------------------------------------------------------------
| #!/bin/sh
|
| DATE=${$1:-$(date --date yesterday +%Y%m%d)}
| ENTRIES=${$2:-500}
|
| echo "DATE = ${DATE}"
| echo "ENTRIES = ${ENTRIES}"
|
`---------------------------------------------------------------------

DATE soll $1 werden, falls $1 vorhanden, alternativ soll das Datum von
gestern verwendet werden.
Ebenso mit "ENTRIES"

fuehre ich das aus, dann erhalte ich:

: ${$1:-$(date --date yesterday +%Y%m%d)}: bad substitution
: ${$2:-500}: bad substitution

Kann mir da wer weiterhelfen? Irgendwo hab ich da wohl einen Denkfehler
drin.

Gruss
Raphael Becker

PS: $ /bin/sh --version
GNU bash, version 2.02.1(1)-release (i686-pc-linux-gnu)
Copyright 1998 Free Software Foundation, Inc.

PPS: Ja, sollte ich mal updaten ... sollte dennoch hier nicht das
Problem sein, oder?

-- 
m(){ if [ $1 -eq 1 ];then echo $2 $3;else m $(($1-1)) $2 $4 $3;m 1 $2 \
$3 $4;m $(($1-1)) $4 $3 $2;fi;};if [ $# -eq 3 ]&&[ $3 -ge 1 -a $1 -le \
3 -a $1 -ge 1 -a $2 -le 3 -a $2 -ge 1 -a $1 -ne $2 ];then m $3 $1 $2 $\
((6-$1-$2)); else echo Usage: /bin/sh hanoi.sh from to num; fi #by rhb


Datumsansicht Baumansicht Betreffansicht Attachement-Sicht

Dieses Archiv wurde generiert von hypermail 2.1.2 : 11. Mar 2002 CET