Case ... in,文件类型案例

Case ... in,文件类型案例

我得到了作业,我需要测试它是否$1是一个文件,特殊文件或文件夹Case $1In 语句

我尝试了一些东西但无法使其发挥作用。您对如何实现这个有任何想法(在案例陈述中)

我需要实现的是:

if [ -f $1 ]
then
    exit 1
elif [ -d $1 ]
then
    exit 2
elif [ -c $1 -o -b $1 ]
then
    exit 3
else
    exit 0
fi

我不要求最终的代码,只是一种实现以下工作的方法:

Case $1 in
    -d) ...

答案1

由于if您发布的基于 - 的代码看起来足够简单,因此使用构造的要求case有点奇怪。我想人们可以检索提供以下内容的文件类型信息ls -l

case "$(ls -ld -- "$1")" in
    -*) echo 'Regular file' ;;
    d*) echo 'Directory' ;;
    *)  echo 'other' ;;
esac

答案2

这是我选择的解决方案:

filetype=$(stat -c%F "$1")
exitcode=$?

if [ $exitcode -eq 0 ]
then
    case "$filetype" in
        "regular file") exit 1;;
        "directory") exit 2;;
        *) exit 3;;
    esac
else
    exit 0
fi

当 stat 失败(文件不存在)时它仍然显示错误,但它工作正常。谢谢

相关内容