ubuntuusers.de

Shell: Skript mit Parameter aufgerufen?

Status: Gelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

bubi97

Avatar von bubi97

Anmeldungsdatum:
17. Oktober 2011

Beiträge: 282

Wohnort: /root

Hallo liebe Gemeinde,

ich wollte ein einfaches Shell-Skript für die komfortable Steuerung des Apache 2 und MySQL-Servers implementieren.

Mein Skript soll, abhängig davon, ob es mit oder ohne Parameter aufgerufen wurde, andere Aktionen ausführen, sodass ich es in eine große if-Bedingung gliedern möchte.

Dabei tut sich aber schon ein Problem auf: Wie kann ich zuverlässig herausfinden, ob das Skript mit oder ohne Parameter aufgerufen wurde?

Ich habe 2 Ideen, die jedoch beide nicht funktionieren:

  1. Testen, ob die Variable $1 gleich "" ist:

1
2
3
4
5
6
7
8
9
#!/bin/bash

if [ $1 == "" ]; then
	echo "Ohne Parameter aufgerufen";
else
	echo "Mit Parameter aufgerufen";
fi

exit 0;

2. Testen, ob die Variable $1 nicht leer ist:

1
2
3
4
5
6
7
8
9
#!/bin/bash

if [ -n $1 ]; then
	echo "Mit Parameter aufgerufen";
else
	echo "Ohne Parameter aufgerufen";
fi

exit 0;

Bei der 1. Variante wird beim Aufruf mit Parameter der else-Block ausgeführt, was so sein sollte.
Beim Aufruf ohne Parameter kommt jedoch folgende Fehlermeldung;

./testskript.sh: Zeile 3: [: ==: Einstelliger (unärer) Operator erwartet.

Anschließend wird ebenfalls der else-Block ausgeführt.

Bei der 2. Variante wird in beiden Fällen der then-Block ausgeführt.

Wie kann ich die if-Abfrage nun so gestalten, dass sie zuverlässig herausfindet, ob das Skript mit oder ohne Parameter aufgerufen wurde?

Shell-Skripte sind für mich völliges Neuland, aber ich habe schon ein wenig Erfahrung mit PHP und C++.

Vielen Dank im Voraus,
bubi97

redknight Team-Icon

Moderator & Supporter
Avatar von redknight

Anmeldungsdatum:
30. Oktober 2008

Beiträge: 21836

Wohnort: Lorchhausen im schönen Rheingau

Frage zuerst die Anzahl der parameter a, wie zB http://www.bin-bash.de/scripts.php beschreibt.

diesch Team-Icon

Avatar von diesch

Anmeldungsdatum:
18. Februar 2009

Beiträge: 5072

Wohnort: Brandenburg an der Havel

Wenn es nur daraum geht, ob irgendein Parameter angegeben wurde:

1
2
3
4
5
if [ "$#" -gt 0 ]; then
 echo Mit Paramreter
else
 echo Ohne Parameter
fi

Wenn du mehrere Parameter unterscheiden willst, schau dir mal getopts an

bubi97

(Themenstarter)
Avatar von bubi97

Anmeldungsdatum:
17. Oktober 2011

Beiträge: 282

Wohnort: /root

Danke, mit

1
if [ $# -gt 0] ;

funktioniert es. Vielleicht könnte man einen Hinweis auf die Variable $# auch mit ins Wiki einfließen lassen?

Gruß,
bubi97

Antworten |