2015-03-26 6 views
12

Chcę sprawdzić, czy wiele zmiennych są ustawione, czy nie, jeśli ustawione, to tylko wykonać kod skryptu, w przeciwnym razie wyjść.Jak sprawdzić, czy wiele zmiennych jest zdefiniowanych lub nie jest w bash?

coś takiego:

if [ ! $DB=="" && $HOST=="" && $DATE=="" ]; then 
    echo "you did not set any variable" 
    exit 1; 
else 
    echo "You are good to go" 
fi  
+0

dla zmiennej kontrolnej ma wartość lub nie [-z $ a -a -z $ b -a -z $ c] && echo "nie ma wartości" || echo "ok good to go!" – powershell

Odpowiedz

25

-z można użyć do sprawdzenia, czy zmienna jest ustawiona lub puste:

if [[ -z $DB || -z $HOST || -z $DATE ]]; then 
    echo 'one or more variables are undefined' 
    exit 1 
fi 

echo "You are good to go" 

Jak użyłeś tagu , Użyłem rozszerzonego testu [[, co oznacza, że ​​nie potrzebuję używać cudzysłowów wokół moich zmiennych. Zakładam, że musisz zdefiniować wszystkie trzy zmienne, aby kontynuować. Numer exit w gałęzi if oznacza, że ​​numer else jest zbędny.

Standardowy sposób zrobić to w każdej muszli POSIX zgodny byłoby tak:

if [ -z "$DB" ] || [ -z "$HOST" ] || [ -z "$DATE" ]; then 
    echo 'one or more variables are undefined'   
    exit 1 
fi 

Istotne różnice tutaj jest to, że każdy sprawdzian zmienna idzie wewnątrz oddzielnego testu i że cudzysłowy są wykorzystywane wokół siebie rozszerzenie parametrów.

+0

Dzięki! Sądzę, że możesz użyć '-o', aby połączyć testy w jednym predykacie, zamiast używać || i trzy oddzielne wywołania '[? – BeeOnRope

+1

@BeeOnRope Zaleca się, aby [unikać używania '-a' i' -o'] (http://pubs.opengroup.org/onlinepubs/009696899/utilities/test.html) (zobacz sekcję _Application Usage_), szczególnie w przypadku zmiennych, które mogą być zdefiniowane przez użytkownika. –

+0

Ma sens, dzięki jeszcze raz! – BeeOnRope

Powiązane problemy