Sto cercando di scrivere uno script estremamente semplice in Ubuntu che mi consenta di passargli un nome file o una directory, e di essere in grado di fare qualcosa di specifico quando si tratta di un file e qualcos'altro quando è una directory. Il problema che sto riscontrando è quando il nome della directory, o probabilmente anche i file, contiene spazi o altri caratteri di escape nel nome.
Ecco il mio codice di base in basso e un paio di test.
#!/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
Ed ecco l'output:
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
Tutti questi percorsi sono validi ed esistono.
if-elsesupportano anche i costrutti in Bashelif. Cordiali saluti.