web-dev-qa-db-ja.com

ディレクトリが存在するかどうかを確認するにはどうすればよいですか?

/bin/x86_64/bin/lsがbashシェルスクリプトのディレクトリであるかどうかを確認するにはどうすればよいですか?

これが私が試したものです:

#!/bin/bash

if [ $# -eq 2 ]; then
    if [[ "$1" = /* ]]
    then
    cd ./bin/x86_64/bin/ls
        if [ -d "$1" ]; then
            echo "ok"
            i="$1"
            echo $i
        else
            echo "error2"
            exit
        fi
    else
        echo "error"
        exit
    fi
fi
1
user3334375

以下を使用して、ディレクトリの存在を確認できます。

_if [[ -d "$1" ]]; then
_

使用するファイルを確認したい場合

_if [[ -e "$1" || -L "$1" ]]; then
_

ファイルが通常のファイル(または通常のファイルへのシンボリックリンク)であるが、ディレクトリ(またはデバイス、ソケット、名前付きパイプなど)ファイルではないかどうかを確認する場合は、次を使用できます。

_if [[ -f "$1" ]]; then
_

ファイルが存在する可能性があるが、サイズがゼロでないことを確認したい場合:

_if [[ -s "$1" ]] then;
_

これらのテストはすべて、stat()システムコールの結果に基づいています(lstat()に依存する_-L_を除く)。ファイルに対してそのような呼び出しを行う権限がない場合(たとえば、ファイルが含まれているディレクトリまたはファイルのシンボリックリンクの解決に関係するディレクトリへの検索アクセス権がないため)、テストは、ファイルが存在しないかのようにサイレントにfalseを返します。

_[[ ... ]]_はksh演算子であり、bashおよびzshでもサポートされています。 (shで使用する)標準的な同等物は、_[_コマンドを使用するものです(上記の2番目の例では、_[ -e "$1" ] || [ -L "$1" ]_を使用します)。

6
Michael Durrant

シェルスクリプトにディレクトリが存在するかどうかを確認するには、次を使用できます。

dir=$1

if [ -d "$dir" ]; then

 #means that $dir exists.

fi

反対を確認するには、追加してください! -dの前-> [ ! -d ....]

0
roval

cdするディレクトリが実際に存在する場合、コードは機能します。

cd行をシステム上のディレクトリ(diff)に変更しました。

-    cd ./bin/x86_64/bin/ls
+    cd /bin/

次に実行しました:

ry@~/Desktop:$ sh test /bin /
ok
/bin

このため、スクリプトに2つの引数を指定する必要があることに注意してください。if [ $# -eq 2 ]; then

また、./bin/は実際にはbin/と同じであることに注意してください。

0
ryanpcmcquen