Bash Script will nich...
-
Hallo Forum,
wie kann man mehrer Bedingungen einer If Abfrage hintereinander schreiben?
Ich möchte in jedem Verzeichnis ab dem Homeverzeichnis bestimmt Befehle ausführen. Leider komme ich mit dem If Statement nicht klar. Und 3 mal tief schachteln möchte ich nicht.
#!/bin/bash
# 1. Param ist Startverzeichnis.for i in $1; do
if [ -d $i ] && [ $i != "." ] && [ $i != ".." ] ; then
echo $i " (Dieses Verzeichnis ist ein Unterverzeichnis!)"# Rufe dieses Skript mit dem Unterverzeichnis erneut auf.
sh $0 $i
fi
done
-
man test
statt && nimmst du -a und schreibst alles in einen []-block.
-
Vielen Dank. Das mit den -a funktioniert in anderen Beispielen. Bei mir funktioniert der Vergleich nicht.
Wie verhindert man das das Skript sich nicht nochmal mit den Verzeichnissen "." und ".." aufruft? Die -ef Vergleich funktioniert bei meinem System nicht. [ $i -ef "."].
-
bash... schrieb:
Vielen Dank. Das mit den -a funktioniert in anderen Beispielen. Bei mir funktioniert der Vergleich nicht.
was funktioniert nicht
if [ -d "$i" -a "$i" != "." -a "$i" != ".." ]; then // $i ist ein unterverzeichnis fi
ich glaube du willst sowieso eher
for i in $1/*; do ...
Und dann hast du eh keine versteckten Dateien, also auch kein . oder ..
-
Die Vergleiche [ "$i" != "." ] hatte ich wieder mit einzelnen if Statements aufgedröselt und haben immer noch nicht funktioniert. Da nahm ich an das es so nicht geht. Aber egal, mit Deinem 2. Tip funktioniert es. Es soll erstmal nur alle leeren Verzeichnisse löschen:
#!/bin/bash
# Removes all empty directories:
# 1. Param: StartingDir# Go recursive through all directories:
for i in $1/*; do
if [ -d $i ] ; then
echo "directory " $i
sh $0 $i
fi
done# If the directory has no files, remove them:
c=`ls -1 $1 | wc -l`
if [ $c -eq 0 ] ; then
rmdir $1
fi
-
Die Vergleiche [ "$i" != "." ] hatte ich wieder mit einzelnen if Statements aufgedröselt und haben immer noch nicht funktioniert. Da nahm ich an das es so nicht geht. Aber egal, mit Deinem 2. Tip funktioniert es. Es soll erstmal nur alle leeren Verzeichnisse löschen:
#!/bin/bash # Removes all empty directories: # 1. Param: StartingDir # Go recursive through all directories: for i in $1/*; do if [ -d $i ] ; then echo "directory " $i sh $0 $i fi done # If the directory has no files, remove them: c=`ls -1 $1 | wc -l` if [ $c -eq 0 ] ; then rmdir $1 fi
Und nochmals vielen Dank für die Hilfe