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-Key: 333785

Url: https://administrator.de/contentid/333785

Printed on: April 25, 2024 at 16:04 o'clock

Mitglied: 132692
Solution 132692 Mar 31, 2017 updated at 14:17:53 (UTC)
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.
Member: OIOOIOOIOIIOOOIIOIIOIOOO
OIOOIOOIOIIOOOIIOIIOIOOO Apr 01, 2017, updated at Apr 03, 2017 at 07:00:56 (UTC)
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
Mitglied: 132692
132692 Apr 01, 2017 at 13:30:53 (UTC)
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.
Member: OIOOIOOIOIIOOOIIOIIOIOOO
OIOOIOOIOIIOOOIIOIIOIOOO Apr 01, 2017 at 15:33:43 (UTC)
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
Mitglied: 132692
132692 Apr 01, 2017 updated at 15:36:46 (UTC)
Goto Top
la2Da=$(ls -1 $TESTfile/bla2*.txt | wc -l)
Member: OIOOIOOIOIIOOOIIOIIOIOOO
OIOOIOOIOIIOOOIIOIIOIOOO Apr 01, 2017, updated at Apr 03, 2017 at 07:02:03 (UTC)
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?
Mitglied: 132692
132692 Apr 01, 2017 updated at 16:22:40 (UTC)
Goto Top
Kann man diese ausblenden?
Klar, Error Redirect nach /dev/null ?!
Bla1Da=$(ls -1 $TESTfile/bla1*.txt 2>/dev/null | wc -l) 
Mitglied: 117471
117471 Apr 01, 2017 at 16:24:46 (UTC)
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
Member: OIOOIOOIOIIOOOIIOIIOIOOO
OIOOIOOIOIIOOOIIOIIOIOOO Apr 01, 2017 at 17:04:35 (UTC)
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