Übergabeparameter

Michi0209

Michi0209

Mitglied
Hallo zusammen,

wenn ich Übergabeparameter an eine Anweisen habe kann ich diese ja mittels $1 usw. anzeigen und damit weiterarbeiten.

wenn ich diese aber mit einer for-schleife ausgeben will, wie muß ich dann auf diese Variable zugreifen?

Code:
#!/bin/sh
export LC_ALL=de_DE.ISO8859-1

echo "Anzahl Übergabe: $#";

for ((i=1;i<=$#;i++))
do
	echo "$i"; -> Hier würde ich gerne meine Parameter ausgeben?!!
done


Danke für Eure Hilfe
 
Hatten wir schon:

-> http://www.unixboard.de/vb3/showthread.php?t=35241

Zitat Wolle:

Was du willst sind lexikalische Variablenzuweisungen.
Aber das ist in keiner mir bekannten Programmiersprache eine gute Idee.
Das ist nämlich immer sauber zu umgehen.
Schau dir mal getops an. Suchmaschine deiner Wahl wird dir helfen.
Findet auch Das hier
Du hast zwar nicht gesagt, welche Shell du verwendest. Aber ich schlussfolgere aus deinem Beitrag, dass es keine exotische ist, und dein Wissen ausreicht, mit meinem Hinweis etwas anfangen zu können.

bzw.

Code:
#cat test.sh
#!/bin/bash
anz=$#;
while [  $# -gt 0 ] ;do

        A[$#]="$1"
        shift;
done
echo "Last Parameter Nr. $anz Value ${A[1]}"
echo "Other Parameter:"
for (( i=$anz;$i > 1 ; ((i--)) ));do
        echo Parameter : ${A[$i]};
done
 
und wenn du sie nicht extra in ein array packen willst, sondern wirklich nur drüberiterieren, kannst du das ziemlich direkt per for-schleife auch machen:
Code:
#!/bin/bash
for parameter in "$@"; do
    echo $parameter
done

im array $@ (bzw der speziellen variable) sind alle parameter, die dem skript übergeben wurden, mit whitespaces getrennt abgespeichert.

zum besseren verständnis:
Code:
#!/bin/bash
echo "Die dem Skript uebergebenene Parameter sind:"
echo "$@"

und die eigentliche for-schleife der bash (also nicht diese c-syntax emulation) iteriert halt eine angegebene variable über eine liste von strings, welche durch whitespaces getrennt sind. (for VARIABLE in liste; do #bla; done)

Code:
for item in bla, zomg blub... ---hihihi---; do
    echo "$item"
done
gibt aus:
Code:
bla,
zomg
blub...
---hihihi---
 
Kurze Anmerkung noch zu dem was Gott_in_schwarz gesagt hat:

Statt "$@" würde in diesem Falle auch "$*" gehen, siehe

Code:
man bash
 
supersucker schrieb:
Statt "$@" würde in diesem Falle auch "$*" gehen, siehe
erm, nein. das würde nicht gehen.
man bash schrieb:
* Expands to the positional parameters, starting from one. When the expansion occurs within double quotes, it expands to a single word with the value of each parameter separated by the first character of the IFS special variable. That is, "$*" is equivalent to "$1c$2c...", where c is the first character of the value of the IFS variable. If IFS is unset, the parameters are separated by spaces. If IFS is null, the parameters are joined without intervening separators.

@ Expands to the positional parameters, starting from one. When the expansion occurs within double quotes, each parameter expands to a separate word. That is, "$@" is equivalent to "$1" "$2" ...

also entweder $@, "$@" oder $*, aber nicht "$*". sonst hat die for schleife genau einen durchgang..



[edit]: wobei "$@" den anderen ($@ und $*) vorzuziehen ist, weil man damit auch über parameter mit leerzeichen iterieren kann:
Code:
./params.bash bla blub "foo bar"
gibt nur im falle von "$@" bei einer for-schleife
Code:
bla
blub
foo bar
aus. die anderen varianten geben alle:
Code:
bla
blub
foo
bar
aus. (für die for-schleife siehe mein erstes post)
 
Zuletzt bearbeitet:
Ähem....

mit "$*" meinte ich

Code:
$*

die "" waren nur zur Abgrenzung.

Das war in dieser Situation dann aber wirklich mißverständlich...........:devil:
 
Hatten wir schon:

-> http://www.unixboard.de/vb3/showthread.php?t=35241

Zitat Wolle:



bzw.

Code:
#cat test.sh
#!/bin/bash
anz=$#;
while [  $# -gt 0 ] ;do

        A[$#]="$1"
        shift;
done
echo "Last Parameter Nr. $anz Value ${A[1]}"
echo "Other Parameter:"
for (( i=$anz;$i > 1 ; ((i--)) ));do
        echo Parameter : ${A[$i]};
done

Naja, hier ging es doch um etwas Anderes.
In diesem Kontext ist das bereits genannte geeigneter.
Code:
#!/bin/bash
for parameter in "$@"; do
    echo $parameter
done

Wolfgang
 

Ähnliche Themen

Falsche Ausgabe von $LINENO

Skript soll nicht doppelt laufen... kill pkill pid cron

Anweisungen innerhalb Until-Schleife

Verschlüsseltes Backup-Script mit rsync

Shell Skript beschleunigen

Zurück
Oben