oiooiooioiioooiioiioiooo
Goto Top

Linux Script mit dreifacher If Abfrage verschachteln

Moin,

ich sitze hier und denke…

Eine Prüfung, ob zwei bestimmte Dateien mit „Platzhalter*“ in einem Ordner sich befinden, gibt es glaube ich nicht. Zumindest habe ich dazu nichts gefunden. Jetzt Überlege ich die If Schleife so zu schreiben:


for TESTfile in $TESTRUECK/TEST-Rueck*.txt; do
	if [ -f ${TESTfile} ] ; then
		for TEST2file in $TESTRUECK/TEST2-Rueck*.txt; do
				if [ -f ${TEST2file} ] ; then
cat /root/rueckmail | mailx -r "Assistent <server@domain.de>" -s "Daten von heute prüfen" -a /samba/TEST-Rueck* -a /samba/TEST2-Rueck* -b bcc@domain.de empfaenger@domain.de  
break
	else
for TESTfile in $TESTRUECK/TEST-Rueck*.txt; do
	if [ -f ${TESTfile} ] ; then
cat /root/testmail | mailx -r "Assistent <server@domain.de>" -s "Daten von heute prüfen" -a /samba/TEST-Rueck* -b bcc@domain.de empfaenger@domain.de  
	else
for TEST2file in $TESTRUECK/TEST2-Rueck*.txt; do
	if [ -f ${TEST2file} ] ; then
cat /root/test2mail | mailx -r "Assistent <server@domain.de>" -s "Daten von heute prüfen" -a /samba/TEST2-Rueck* -b bcc@domain.de empfaenger@domain.de  
break
fi
done


Ich habe es nicht ausprobiert, da ich hier bereits sehe, dass einie Menge falsch ist.

Oder gibt es da noch eine bessere Lösung welche ich übersehen habe?

Viele Grüße

Ich

Content-ID: 333785

Url: https://administrator.de/forum/linux-script-mit-dreifacher-if-abfrage-verschachteln-333785.html

Ausgedruckt am: 06.04.2025 um 15:04 Uhr

132692
Lösung 132692 31.03.2017 aktualisiert um 16:17:53 Uhr
Goto Top
Eine Prüfung, ob zwei bestimmte Dateien mit „Platzhalter*“ in einem Ordner sich befinden, gibt es glaube ich nicht.
#!/bin/bash
if [ $(ls -1 /Ordner/bla*.txt | wc -l) -gt 0 ] && [ $(ls -1 /Ordner/bla2*.txt | wc -l) -gt 0 ] ;then
   # go on
fi
Gruß p.
OIOOIOOIOIIOOOIIOIIOIOOO
OIOOIOOIOIIOOOIIOIIOIOOO 01.04.2017, aktualisiert am 03.04.2017 um 09:00:56 Uhr
Goto Top
Herzlichen Dank für deine schnelle Antwort. Ja danach habe ich gesucht danke dir! Danke danke danke. face-smile

Also ist das der richtige Ansatz?


#!/bin/bash 
TESTfile=/home/xxx/Dokumente
if [ $(ls -1 $TESTfile/bla1*.txt | wc -l) -gt 0 ] && [ $(ls -1 $TESTfile/bla2*.txt | wc -l) -gt 0 ] ;then 
        echo "Ist beides da"  
                else
if [ $(ls -1 $TESTfile/bla1*.txt | wc -l) -gt 0 ]  ;then
        echo "Nur bla1 da"  
                else
if [ $(ls -1 $TESTfile/bla2*.txt | wc -l) -gt 0 ] ;then
        echo "Nur Bla2 da"  
                else
        echo "Nichts da"  
                fi
        fi
fi
132692
132692 01.04.2017 um 15:30:53 Uhr
Goto Top
Also ist das der richtige Ansatz?
Jaein, effektiver ist es wenn du das Ergebnis beider Counter erst in Variablen speicherst und dann per If abfragst, dann muss das System nicht x mal das selbe enumerieren, das kost Zeit und verschwendet Ressourcen.
OIOOIOOIOIIOOOIIOIIOIOOO
OIOOIOOIOIIOOOIIOIIOIOOO 01.04.2017 um 17:33:43 Uhr
Goto Top
OK, wie könnte so etwas aussehen?
Bla2Da=[ $(ls -1 $TESTfile/bla2*.txt | wc -l) -gt 0 ]

Scheint falsch zu sein. face-smile
132692
132692 01.04.2017 aktualisiert um 17:36:46 Uhr
Goto Top
la2Da=$(ls -1 $TESTfile/bla2*.txt | wc -l)
OIOOIOOIOIIOOOIIOIIOIOOO
OIOOIOOIOIIOOOIIOIIOIOOO 01.04.2017, aktualisiert am 03.04.2017 um 09:02:03 Uhr
Goto Top
#!/bin/bash 
TESTfile=/home/xxx/Dokumente
Bla1Da=$(ls -1 $TESTfile/bla1*.txt | wc -l)
Bla2Da=$(ls -1 $TESTfile/bla2*.txt | wc -l)
if [ $Bla1Da -gt 0 ] && [ $Bla2Da -gt 0 ] ;then 
        echo "Ist beides Da"  
                else
if [ $Bla1Da -gt 0 ] ;then
        echo "Nur Bla1 Da"  
                else
if [ $Bla2Da -gt 0 ] ;then
        echo "Nur Bla2 da"  
                else
        echo "Nichts da"  
                fi
        fi
fi


Schaut richtig professionell aus face-smile

eine Frage noch.

Ich habe immer die nachfolgende Ausgabe wenn Deitei nicht da ist:
„ls: Zugriff auf '/home/xxx/Dokumente/bla2*.txt' nicht möglich: Datei oder Verzeichnis nicht gefunden“

Kann man diese ausblenden?
132692
132692 01.04.2017 aktualisiert um 18:22:40 Uhr
Goto Top
Kann man diese ausblenden?
Klar, Error Redirect nach /dev/null ?!
Bla1Da=$(ls -1 $TESTfile/bla1*.txt 2>/dev/null | wc -l) 
117471
117471 01.04.2017 um 18:24:46 Uhr
Goto Top
Hallo,

echo "Dieser Text wird nie erscheinen!" 2>&1 > /dev/null

Das erste Statement (also 2>&1) leitet die Standard-Fehlerausgabe auf die Standardausgabe um und das zweite Statement "> /dev/null" schiebt alle Ausgaben dorthin, wo nie die Sonne scheint.

Die Kurzform wäre übrigens

echo "Dieser Text wird nie erscheinen!" &> /dev/null

Gruß,
Jörg
OIOOIOOIOIIOOOIIOIIOIOOO
OIOOIOOIOIIOOOIIOIIOIOOO 01.04.2017 um 19:04:35 Uhr
Goto Top
Danke dir auch für deinen Beitrag.

Hab ich probiert in die Schleife einzusetzen, seit dem konnte es keine Dateien mehr finden.
&> /dev/null

Die Lösung von Pattern hat funktioniert.

Danke euch.

Grüße

Ich