ケース…イン、パイル型ケース

ケース…イン、パイル型ケース

$1仕事を得ましたが、それがファイルなのか、特殊なファイルなのか、フォルダなのかをテストする必要があります。ケース$1ステートメント

いくつか試してみましたが、うまくいきませんでした。これを実装する方法に関するアイデアはありますか(in Caseステートメント)

私が達成しなければならないことは次のとおりです。

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

統計が失敗すると(ファイルが存在しない)、まだエラーが表示されますが、正常に動作します。ありがとう

関連情報