Próbuję napisać bardzo prosty skrypt w Ubuntu, który pozwoliłby mi przekazać go albo nazwę pliku, albo katalog, i być w stanie zrobić coś konkretnego, gdy jest to plik i coś jeszcze, gdy jest to katalog. Problemem, który mam, jest to, że nazwa katalogu (lub prawdopodobnie także pliki) zawiera spacje lub inne znaki, które można wypisać.Sprawdź, czy przekazany argument jest plikiem lub katalogiem w BASH
Oto mój podstawowy kod poniżej i kilka testów.
#!/bin/bash
PASSED=$1
if [ -d "${PASSED}" ] ; then
echo "$PASSED is a directory";
else
if [ -f "${PASSED}" ]; then
echo "${PASSED} is a file";
else
echo "${PASSED} is not valid";
exit 1
fi
fi
A oto wyjście:
[email protected]~ $ ./scripts/testmove.sh /home/andy/
/home/andy/ is a directory
[email protected]~ $ ./scripts/testmove.sh /home/andy/blah.txt
/home/andy/blah.txt is a file
[email protected]~ $ ./scripts/testmove.sh /home/andy/blah\ with\ a\ space.txt
/home/andy/blah with a space.txt is not valid
[email protected]~ $ ./scripts/testmove.sh /home/andy\ with\ a\ space/
/home/andy with a space/ is not valid
Wszystkie te ścieżki są ważne, a istnieje.
'if'-'else' konstrukty w bash również wspierać' elif'. Po prostu dla FYI. –
powinien mieć tutaj cytaty: 'PASSED =" $ 1 "' –
@glenn - Co ciekawe, cytaty nie są wymagane w zmiennych zadaniach. –