我正在尝试在Ubuntu中编写一个非常简单的脚本,该脚本允许我传递文件名或目录,并且能够在文件时执行特定操作,而在目录时执行其他操作。我遇到的问题是名称中的目录名称(或可能还有文件)中包含空格或其他可转义字符。
这是下面的基本代码,并进行了一些测试。
#!/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
这是输出:
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
所有这些路径均有效且存在。
@glenn-奇怪的是,变量分配中不需要引号。
—
John Kugelman
检查Shell脚本中是否存在目录的可能重复项。
—
jww
if
-else
在bash结构也支持elif
。仅供参考。