$String übergabe funktioniert nicht richtig

OS X

OS X

Registriert
Thread Starter
Dabei seit
20.02.2013
Beiträge
2
Reaktionspunkte
0
Hallo liebe Leser, :)
ich bin noch Anfänger und probiere mich erst seit ein paar Tagen mit Unix.
Seit 2 Tagen quäle ich Google mit einem warscheinlich schnell gelößtem Problem.
Ich hab' mir'n ganz einfachen Countdown gebastelt, der von 10 bis 0 runterzählt:
Code:
#!/bin/sh
#
for Zahl in {10..0}
do
echo "$Zahl \c"
sleep 1
done
echo "\n >> Fertig!\n"

Ausgabe:
Code:
10 9 8 7 6 5 4 3 2 1 0
 >> Fertig!

Das funktioniert soweit super.
Nun würde ich aber gerne die Startzahl jedesmal selbst übergeben,
jedoch sind alle meine bisherigen Versuche kläglich gescheitert.

Warum funktioniert die $1 Übergabe hier nicht richtig?
Die Datei liegt in "/bin" und im Terminal rufe ich sie mit "countdown 10" auf.
Code:
#!/bin/sh
#
for Zahl in {$1..0}
do
echo "$Zahl \c"
sleep 1
done
echo "\n >> Fertig!\n"

Ausgabe:
Code:
{10..1} 
 >> Fertig!

Hab echt schon hunderte Sachen probiert, nichts hat funktioniert.
Ich hoffe, da kann mir jemand bei helfen. :)

Liebe Grüße und ein herzliches Danke im vorraus,
OS X
 
#! /bin/bash
echo "Das sind die Zahlen: $*"
 
Oder Variablen einzeln abgreifen, z.B. so:

for i in $1 $2 $3
do
echo Zahl: $i
done

Und hier jetzt gleiche Ausgabe, aber Variablen alle zusammen abgegriffen:

for i in $*
do
echo Zahl: $i
done
 
  • Gefällt mir
Reaktionen: Paelmchen
Für Deine eigentliche Countdown-Frage, schaue mal hier: KLICK
 
Hi,

Die Frage war nicht wie eine Schleife geht, sondern wieso diese nicht geht. Vollkommen berechtigt.

So geht es:

for i in $(eval echo {$X..0})

Warum? Weil in geschweiften Klammern keine Variablen aufgelöst werden.

Atti
 
  • Gefällt mir
Reaktionen: Paelmchen
Hi

Ich meine Brace Expansions, nicht geschweifte Klammern im allgemeinen.

Atti
 
Nichts geht über die Kornshell - kann viel, ist auf allen Unixen da und überall gleich ;)

Code:
#!/bin/ksh

for i in {${1}..0}
do
        echo -n "$i "
        sleep 1
done
echo "...Fertig!"

Aufgerufen als Skript Countdown.sh:
Code:
Rechner:~ User$> ./countdown.sh 5
5 4 3 2 1 0 ...Fertig!
Obiger Hinweis zur bash stimmt ebenfalls!
 
Pff, Kornshell. :p

Code:
#!/bin/bash
#set -vx

for i in $(eval echo "{${1:-10}..${2:-0}}")
do
  echo -ne "$i "
  for bs in $(eval echo "{1..${#i}}"); do echo -ne "\b\b"; done
  sleep 1
done
echo
 
Hi,

Die Frage war nicht wie eine Schleife geht, sondern wieso diese nicht geht. Vollkommen berechtigt.

So geht es:

for i in $(eval echo {$X..0})

Warum? Weil in geschweiften Klammern keine Variablen aufgelöst werden.

Atti

Genau sowas hab ich gesucht. - Vielen Dank! :zwinker:
Ein herzliches Danke auch an die anderen!
Wieder was dazu gelernt.
Wenn ich #!/bin/bash benutze, klappen z.B. Schriftformatierungen wie (echo "\e[91mRote Schrift\e[0m") nicht..
Deshalb benutze ich #!/bin/sh, was bisher immer recht gut funktionierte. :D
Liebe Grüße, OS X

PS: Wo verstecken sich die Danke-Button? ^^
 
Wenn ich #!/bin/bash benutze, klappen z.B. Schriftformatierungen wie (echo "\e[91mRote Schrift\e[0m") nicht..

Einzeln: echo -e ...
Global: shopt -qs xpg_echo

Deshalb benutze ich #!/bin/sh, was bisher immer recht gut funktionierte. :D

http://git.savannah.gnu.org/cgit/bash.git/tree/POSIX

Aus plattformübergreifenden Gründen bevorzuge ich #!/bin/bash. Jeder wie er halt mag.

PS: Wo verstecken sich die Danke-Button? ^^

Du bist noch zu frisch, Frischling. Das ist die Dankeschranke. :D
 
Zurück
Oben Unten