Zum Inhalt springen

[bash] Falsche Parameterübergabe von Shellscript


Empfohlene Beiträge

Geschrieben

Hi,

kleines Problem mit Shellscripten und Parametern.

script1

param1_dir=$1

echo $param1_dir


if [ -d $param1_dir ]

then

	export ABC=$param1_dir

else

	export ABC=/opt/abc

fi
script2
param1_command=$1

param2_dir=$2


if [ $param1_command ]

then

	. script1 $param2_dir

else

	. script1

fi

Problem ist nun wenn ich script1 alleine starte funktionierts wunderbar.

Starte ich script2 mit

./script2 delete /opt/abc

funktioniert alles.

./script delete

funktioniert nicht weil bei script eins dann beim echo $param1_dir "delete" ausgegeben wird.

Problem ist also das wenn ich script1 ohne Parameter aus script2 aufrufe übergibt er immer das $param1_command als $1.

Weiss jemand wie ich das umgehen kann?

Gruß Scratch

Geschrieben

bisschen konfus das ganze. also ich blicke bei deiner erklährung und 5 minütigen studieren der skripte nicht durch was du vorhast.

für was ist denn ABC?

was meinst du mit ./script delete

muss das in 2 scripten sein?

vielleicht steh ich auch aufm schlauch aber ich verstehs nich... sorry :floet:

Geschrieben

danke für die Antworten!

Das sind natürlich nur Beispielscripte ohne Sinn.

@shutdown-Frnow:

leg die Dateien doch einfach mal an und probiers dann siehst du schon was ich meine.

@1226:

Dann geht garnichts. "command not found" ist der Fehler.

Geschrieben

Ok ... dazu hab ich dann noch eine Frage:

Benutze ich . meinscript

und es werden Variabeln exportiert sind diese danach immer noch mit env sichtbar.

Benutze ich ./meinscript sind sie nicht in env sichtbar

Gibt es sonst noch unterschiede?

Geschrieben

Ja sicher gibt es einen klaren Unterschied:

". file" bzw. "source file" sourced die Datei und das bedeutet, dass es so ist,

als würde man hergehen und via copy&pasty die Datei file anzufügen, sprich

der Inhalt der Datei file wird in eine andere Datei bzw. die Shell geschrieben.

Geschrieben

Also leider geht es nicht wirklich ...

ich hab jetzt aber 2 bessere Testscripte für jeden der mir noch helfen möchte.

script1

parama=$1


echo "1 --- parama="$parama


if [ $parama ]

then

	echo "1 --- parama is set"


	if [ -d $parama ]

	then

		echo "1 --- dir: "$parama

		export ABC=$parama

	else

		echo "1 --- dir does not exist"

	fi

else

	echo "1 --- standard: /opt/abc"

	export ABC=/opt/abc

fi
script2
command=$1

directory=$2


echo "2 --- command="$command

echo "2 --- directory="$directory


if [ $command ]

then

	echo "2 --- command is set"


	if [ $directory ]

	then

		echo "2 --- directory is set"

		. script1 $directory

	else

		echo "2 --- directory is not set"

		. script1

	fi

else

	echo "2 --- command is not set"

fi
Hier die Ergebnisse des Scriptes
$ ./script2         #FALL 1 korrekt

2 --- command=

2 --- directory=

2 --- command is not set


$ ./script2 aaa         #FALL 2 falsch

2 --- command=aaa

2 --- directory=

2 --- command is set

2 --- directory is not set

1 --- parama=aaa

1 --- parama is set

1 --- dir does not exist


$ ./script2 aaa /opt/         #FALL 3 korrekt

2 --- command=aaa

2 --- directory=/opt/

2 --- command is set

2 --- directory is set

1 --- parama=/opt/

1 --- parama is set

1 --- dir: /opt/


$ ./script2 aaa bbb         #FALL 4 korrekt

2 --- command=aaa

2 --- directory=bbb

2 --- command is set

2 --- directory is set

1 --- parama=bbb

1 --- parama is set

1 --- dir does not exist

Bis auf Fall 2 geht alles.

Wie man sieht übernimmt hier "parama" den wert von "command" und das soll es nicht ... Für Fall 2 sollte das Ergebnis "dir: /opt/abc" sein.

Danke!!

Gruß Scratch

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...