Bash Prüfen ob Variable nicht gesetzt ist

Pfandfinder

Lieutenant
Registriert
Nov. 2020
Beiträge
663
ich habe diese Art von Script:

Bash:
#!/bin/bash

filesize=5

if [[ $filesize -lt 10 ]]; then
    ERROR=true
fi

if [ !$ERROR ]; then
    echo "kein fehler"
fi

doch egal wie groß filesize ist, ich erhalte immer "kein fehler". die 1. Ib Abfrage ist richtig, die 2. scheint nicht zu funktionieren. aber so soll man ja scheinbar prüfen können ob eine variable gesetzt ist. hä.
 
[[ -z $ERROR ]] prüft, ob $ERROR existiert.
 
Ein paar Hinweise:
Bash kennt keine booleans, d.h. was du da genau genommen machst, sind String-Comparisons
Bash:
-z $ERROR
prüft in dem Zusammenhang nicht, ob $ERROR existiert, sondern kontrolliert, ob ein String leer ist, d.h.
Bash:
ERROR=""
if [ -z $ERROR ]; then
in diesem Beispiel wäre die if-Bedingung wahr, obwohl $EXPORT existiert (aber der String ist halt leer)

Außerdem wäre in
Bash:
ERROR=true
if [ -z $ERROR ]; then
und
Bash:
ERROR=false
if [ -z $ERROR ]; then
beide Varianten immer falsch, denn egal ob der String "false" oder "true" lautet, der String ist in beiden Fällen nicht leer.

Alles in allem würde ich das Beispiel eher so aufbauen:
Bash:
#!/bin/bash

filesize=5
ERROR=0

if [[ $filesize -lt 10 ]]; then
    ERROR=1
fi


if [ $ERROR == 0 ]; then
    echo "kein fehler"
fi
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Raijin, netzgestaltung, ksk23 und eine weitere Person
Zurück
Oben