我正在尝试在 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
所有这些路径都是有效的,并且存在。
那应该行得通。我不确定它为什么会失败。你正确地引用了你的变量。如果将此脚本与 double 一起使用会发生什么[[ ]]?
[[
]]
if [[ -d $PASSED ]]; then echo "$PASSED is a directory" elif [[ -f $PASSED ]]; then echo "$PASSED is a file" else echo "$PASSED is not valid" exit 1 fi
双方括号是对[ ]. 它不需要引用变量,即使它们包含空格。
[ ]
还值得尝试:-e测试路径是否存在而不测试它是什么类型的文件。
-e