![Was ist falsch an meinem Dateiprüfskript?](https://rvso.com/image/76407/Was%20ist%20falsch%20an%20meinem%20Dateipr%C3%BCfskript%3F.png)
Ich verstehe nicht, warum der letzte Teil meines Skripts nichts anzeigt, wenn keine Datei oder kein Verzeichnis gefunden wird.
echo -n "Please enter a filename or directory: "
read filename
if [ -z "$filename" ]; then
echo "You did not enter anything!"
exit 1
fi
if [ -e "$filename" ]; then
if [ -f "$filename" ]; then
echo "You entered a file."
elif [ -d "$filename" ]; then
echo "You entered a directory."
else
echo "You did not enter a valid file or directory."
fi
fi
exit
Ich weiß nicht, was mit meinem Code nicht stimmt. Er zeigt das Echo nicht an, wenn eine ungültige oder nicht vorhandene Datei oder ein ungültiges oder nicht vorhandenes Verzeichnis eingegeben wird.
Antwort1
Ich habe Ihr Skript neu formatiert, um die if
Anweisungen einzurücken. Dadurch wurde deutlicher, dass Ihr letzter Befehl echo
nur dann ausgeführt wird, wenn -f
wahr und -d
falsch ist. Wenn der Benutzer eine Datei oder ein Verzeichnis eingibt, das nicht existiert, schlägt dies -f
fehl.
Erwägen Sie diese Überarbeitung Ihres letzten Abschnitts:
if [ -e "$filename" ]; then
if [ -f "$filename" ]; then
echo "You entered a file."
elif [ -d "$filename" ]; then
echo "You entered a directory."
fi
else
echo "You did not enter a valid file or directory."
fi
Wenn der wahre Abschnitt der ersten if
Anweisung früher (durch ) beendet wird else
, verfügen nicht vorhandene Dateien/Verzeichnisse über einen auszuführenden Codeabschnitt.
Antwort2
Es gibt viele andere Dateitypen, die in diesem Code keine Ausgabe verursachen. Dazu gehören symbolische Links, benannte Pipes, Sockets sowie spezielle Block- und Zeichendateien. Insbesondere , , /dev/tty
und fallen durch, ohne vom Code erkannt zu werden./dev/stdin
/dev/stdout
/dev/stderr
Sie könnten die Logik ändern, um dies zu berücksichtigen, allerdings ist diese Struktur (Struktur im Stil einer Case-Anweisung) leichter zu lesen und weniger fehleranfällig:
if [ ! -e "$filename" ]; then
echo "$filename does not exist"
exit 1
elif [ -f "$filename" ]; then
echo "You entered a file."
elif [ -d "$filename" ]; then
echo "You entered a directory."
else
echo "$filename is not a regular file or directory."
exit 2
fi