我不明白为什么在找不到文件或目录时我的脚本的最后一部分不显示任何内容。
echo -n "Please enter a filename or directory: "
read filename
if [ -z "$filename" ]; then
echo "You did not enter anything!"
exit 1
fi
if [ -e "$filename" ]; then
if [ -f "$filename" ]; then
echo "You entered a file."
elif [ -d "$filename" ]; then
echo "You entered a directory."
else
echo "You did not enter a valid file or directory."
fi
fi
exit
我不知道我的代码有什么问题。如果输入无效或不存在的文件或目录,则不会显示回显。
答案1
我重新格式化了您的脚本以缩进if
语句。这样做可以更清楚地表明您的最后一个echo
仅在-f
为真且-d
为假时才会发生。如果用户输入不存在的文件或目录,则会-f
失败。
考虑对上一节的修改:
if [ -e "$filename" ]; then
if [ -f "$filename" ]; then
echo "You entered a file."
elif [ -d "$filename" ]; then
echo "You entered a directory."
fi
else
echo "You did not enter a valid file or directory."
fi
第一个语句的真实部分if
较早结束(由else
);那么不存在的文件/目录就有一段代码要执行。
答案2
还有许多其他类型的文件不会导致此代码中的任何输出。其中包括符号链接、命名管道、套接字以及块和字符特殊文件。值得注意的是,/dev/tty
、/dev/stdin
、/dev/stdout
和/dev/stderr
都失败了,未被代码检测到。
您可以修改逻辑来解决这个问题,但是,这种结构(case 语句样式结构)更易于阅读并且不易出错:
if [ ! -e "$filename" ]; then
echo "$filename does not exist"
exit 1
elif [ -f "$filename" ]; then
echo "You entered a file."
elif [ -d "$filename" ]; then
echo "You entered a directory."
else
echo "$filename is not a regular file or directory."
exit 2
fi