您好我想用案例
简化我的脚本echo "The file $1 is "
if [ -f $1 ] then;
echo "an regular file"
elif [ -d $1 ] then;
echo "a directory"
fi
通过类似的东西
case $1 in
[ -f $1 ])
echo "an regular file"
;;
[ -d $1 ])
echo "a directory"
;;
esac
答案 0 :(得分:4)
这不是case
在任何编程语言中的工作方式。在case
中,您在顶部有一个提供值的测试/表达式,并且根据该值,您可以执行不同的操作。这一点的唯一之处在于,您只运行测试命令一次,而不是每个elif
分支。
你想要的只是if
/ elif
,语法不同,这有点无意义......
如果您想简化它,您可以使用stat
:
case $(stat -c%F "$1") in
directory)
echo Directory; ;;
regular\ file)
echo File; ;;
esac
这比第一个示例(稍微)有更好的性能,因为它只运行一个外部命令
额外提示:请记住始终引用文件名,因此请使用:[ -f "$1" ]
和不 [ -f $1 ]
。考虑1)[
只是一个shell命令(内置或/bin/[
,虽然没有真正的区别),2)$1
可能包含空格或其他空格...
答案 1 :(得分:1)
如果您确实需要来自给定文件的regular file
或directory
输出,请使用stat
command:
stat -c '%F' afile.txt
regular file
stat -c '%F' adirectory
directory