带有案例测试条件的bash脚本

时间:2014-10-21 12:11:48

标签: bash conditional

您好我想用案例

简化我的脚本
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

2 个答案:

答案 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 filedirectory输出,请使用stat command

stat -c '%F' afile.txt
regular file

stat -c '%F' adirectory
directory