radoe2 schrieb:
| shopt -s nullglob
FILE=/home/$USER/Ordner/datei*.zip
for f in $FILE; do
FOUND=YES
break
done
if [ -n "$FOUND" ]; then
# mach was, mindestens eine Datei war gerade eben da...
echo "Ist da"
fi
|
Der Name $FILE ist irreführend: mindestens müsste es $FILES heißen, da ja mehrere Dateien gefunden werden können, wie Du schon richtig geschrieben hast. Aber eigentlich braucht man die Variable gar nicht. Man kann ja das Glob-Muster gleich in der for
-Schleife verwenden.
Dein Ansatz hat aber noch ein anderes Problem: selbst, wenn keine Datei gefunden wird, wird die Schleife ein Mal durchlaufen! Um das zu retten müsstest Du prüfen, ob es die Datei gibt. Oder Du setzt in der bash
die Option "nullglob".
Du solltest auch $FOUND vorher mit unset
löschen, denn sonst kann es passieren, dass eine aus der Umgebung geerbte Variable $FOUND das Ergebnis des Skriptes verfälscht.
Um solche Effekte etwas unwahrscheinlicher zu machen, benennt man auch besser lokale Variablen klein, weil die Umgebungsvariablen praktisch alle groß geschrieben werden (z.B. $PATH).
Aber auch $FOUND braucht man nicht wirklich: man kann die ganze Logik an Ort und Stelle in der for
-Schleife ausführen.
Summa summarum könnte man es so machen:
| for f in "/home/$USER/Ordner/datei"*.zip; do
if [ -e "$f" ]; then
echo "$f ist da"
# andere Arbeit
exit 0
fi
done
exit 1
|
Ciao
robert