[bash] schauen ob Variable gesetzt ist

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
blackm
Moderator und Co-Admin
Beiträge: 5921
Registriert: 02.06.2002 15:03:17
Lizenz eigener Beiträge: MIT Lizenz

[bash] schauen ob Variable gesetzt ist

Beitrag von blackm » 10.03.2004 18:36:55

Hi,

ich moechte schauen ob eine Variable einen bestimmen Wert hat. Mit

Code: Alles auswählen

if [ $TEST == 'wert' ]
then
    echo "es wird getestet"
else
    echo "normale Installation";
fi
geht das. Wenn $TEST aber garnicht gesetzt ist bekomme ich Probleme...mit

Code: Alles auswählen

if [ $TEST ]
then
    if [ $TEST == 'wert' ]
    then
	echo "es wird getestet"
    else
	echo "normale Installation";
    fi
fi
kann man das Problem umgehen....gibt es vielleicht auch einen einfacheren Weg? Also das die beiden Tests in einem Abwasch gemacht werden...

by, Martin
Schöne Grüße

Martin

Neu im Forum? --> https://wiki.debianforum.de/debianforum ... tensregeln
Log- und Konfigurationsdatein? --> pastebin.php
Forum unterstützen? --> https://wiki.debianforum.de/debianforum.de/Spenden

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 10.03.2004 19:30:00

Häng entweder etwas davor oder setze es in Gänsefüsschen:

Code: Alles auswählen

if test x$FOO = xbar;
BTW: Bei "test" nur ein Gleichheitszeichen, "==" ist bash-spezifisch

Benutzeravatar
blackm
Moderator und Co-Admin
Beiträge: 5921
Registriert: 02.06.2002 15:03:17
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von blackm » 11.03.2004 06:43:48

1a, das funktioniert. In der ManPage von test ist das -x leider nur in Verbindung mit Datein gelistet...
Schöne Grüße

Martin

Neu im Forum? --> https://wiki.debianforum.de/debianforum ... tensregeln
Log- und Konfigurationsdatein? --> pastebin.php
Forum unterstützen? --> https://wiki.debianforum.de/debianforum.de/Spenden

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 11.03.2004 15:57:02

Das hat nichts mit der -x Option zu tun! Die Shells setzen die Variablen immer ein, bevor der Befehl ausgeführt wird (füge mal ein set -x an den Anfang deines Programmes)

Wenn FOO=Bar ist, wird

Code: Alles auswählen

if test $FOO = Bar;
als

Code: Alles auswählen

if test Bar = Bar;
ausgeführt, kein Problem, ist FOO leer, steht da

Code: Alles auswählen

if test = Bar;
,was natürlich unsinn ist. Machst du jedoch

Code: Alles auswählen

if test x$FOO = xBar;then
(kannst auch ein y oder ein @ oder wasweissich nehmen; oder halt Anführungszeichen: "$FOO" = "Bar"), und FOO ist leer, steht dort

Code: Alles auswählen

if test x = xBar; then
was wiederum ok ist.

keyem
Beiträge: 303
Registriert: 23.08.2002 07:50:28
Wohnort: Berlin

Beitrag von keyem » 11.03.2004 16:26:26

Joghurt hat geschrieben:Das hat nichts mit der -x Option zu tun! Die Shells setzen die Variablen immer ein, bevor der Befehl ausgeführt wird (füge mal ein set -x an den Anfang deines Programmes)

Wenn FOO=Bar ist, wird

Code: Alles auswählen

if test $FOO = Bar;
als

Code: Alles auswählen

if test Bar = Bar;
ausgeführt, kein Problem, ist FOO leer, steht da

Code: Alles auswählen

if test = Bar;
,was natürlich unsinn ist. Machst du jedoch

Code: Alles auswählen

if test x$FOO = xBar;then
(kannst auch ein y oder ein @ oder wasweissich nehmen; oder halt Anführungszeichen: "$FOO" = "Bar"), und FOO ist leer, steht dort

Code: Alles auswählen

if test x = xBar; then
was wiederum ok ist.
Genau: das ist doch mal richtiges Wissen für die Ewigkeit, in den Batchdateien unter DOS 2.11 ging das ja im Prinzip schon genauso :wink:

keyem

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Beitrag von roli » 13.03.2004 14:56:06

Hi,

ich haette da noch eine andere Loesung

Code: Alles auswählen

if [ -n "$myvar" ]
then
  echo "Variable ist gesetzt"
else
  echo "Variable ist nicht gesetzt"
fi
Die Anfuehrungszeichen um myvar sind wichtig, da die Shell $myvar durch nichts ersetzt, wenn die Variable nicht gesetzt ist. Dann gibt es eine Fehler der Sinngemaess heist, test wurde mit zuwenig Parametern aufgerufen. Wenn die Anfuehrungszeichen da sind, wird $myvar durch entweder den Inhalt, oder einen leeren String ersetzt, jedenfalls meckert test dann nicht das zuwenig Parameter uebergeben wurden. Ich habe mir daher angewoehnt grundsaetzlich jede Variable die ich mittels test verwende in Anfuehrungszeichen zu setzen.
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

Benutzeravatar
riankrimsteel
Beiträge: 131
Registriert: 23.03.2003 19:06:06
Wohnort: Göttingen
Kontaktdaten:

Beitrag von riankrimsteel » 13.03.2004 15:47:40

Hi,

ich häte da auch noch eine Alternative anzubieten:

Code: Alles auswählen

#!/bin/bash
if [ -z $test ]; then
        echo "Test ist nicht gesetzt"
else
        echo "Test ist gesetzt"
fi
exit 0
Gruss Dennis
For every problem, there is a solution that's simple, easy, and wrong.

Antworten