Estoy tratando de escribir un script extremadamente simple en Ubuntu que me permita pasarlo ya sea un nombre de archivo o un directorio, y poder hacer algo específico cuando es un archivo, y algo más cuando es un directorio. El problema que tengo es cuando el nombre del directorio, o probablemente también los archivos, tiene espacios u otros caracteres escapables están en el nombre.
Aquí está mi código básico a continuación, y un par de pruebas.
#!/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
Y aquí está el resultado:
andy@server~ $ ./scripts/testmove.sh /home/andy/
/home/andy/ is a directory
andy@server~ $ ./scripts/testmove.sh /home/andy/blah.txt
/home/andy/blah.txt is a file
andy@server~ $ ./scripts/testmove.sh /home/andy/blah\ with\ a\ space.txt
/home/andy/blah with a space.txt is not valid
andy@server~ $ ./scripts/testmove.sh /home/andy\ with\ a\ space/
/home/andy with a space/ is not valid
Todos esos caminos son válidos y existen.
if
- Laselse
construcciones en Bash también son compatibleselif
. Solo para tu información.