ファイルがBashまたはシェルに存在するかどうかを適切に確認する方法(例を含む)
目次
このチュートリアルでは、bashまたはシェルスクリプトでファイルやディレクトリをチェックするために使用できるさまざまな属性について説明します。 ]
でbash条件式を使用するか、でtestを使用してファイルが存在するかどうかを確認できます。
すべての例でbashif and else演算子を使用しているので、以下を読むことをお勧めします:bash ifelse初心者向け使用ガイド
1. Bash / Shell:ファイルが存在し、通常のファイルであるかどうかを確認します
このセクションでは、通常のファイルがbashに存在するかどうかを確認する例を示します。
1.1:方法-1:シングルブラケットまたはダブルブラケットを使用する
ダブルブラケットを使用する]
#!/bin/bashFILE="/etc/passwd"if ];then echo "$FILE exists"else echo "$FILE doesn"t exist"fi
単一のブラケットを使用する
#!/bin/bashFILE="/etc/passwd"if ;then echo "$FILE exists"else echo "$FILE doesn"t exist"fi
1.2:方法2:テストコマンドの使用
test
コマンドは、ファイルタイプの確認と比較に使用されます値。
#!/bin/bashFILE="/etc/passwd"if test -f $FILE; then echo "$FILE exists"else echo "$FILE missing"fi
1.3:方法3:単一行
この例では、単一または二重の括弧を使用できます。シェルで1つのライナーコードを記述する場合は、単語の分割が行われたときにコンソールで警告が表示されるリスクを最小限に抑えるため、常に二重角かっこを使用することをお勧めします。
#!/bin/bashFILE="/etc/passwd"] && echo "$FILE exists" || echo "$FILE missing"
&&
の後のステートメントは、成功した場合に実行されます。最初の条件がFALSEを返す場合、||
を含むステートメントが実行されます。
同様にtestコマンドを使用して、通常のファイルがbashまたはシェルスクリプトに1行で存在するかどうかを確認します。 。
#!/bin/bashFILE="/etc/passwd"test -f $FILE && echo "$FILE exists" || echo "$FILE missing"
2. Bash / Shell:ファイルが存在するかどうかを確認します(空か空でないか)
ファイルが存在するかどうかを確認します空の場合、またはコンテンツが含まれている場合は、「-s
」属性を使用します
2.1:方法-1:シングルブラケットまたはダブルブラケットを使用します
二重括弧を使用して、ファイルが存在し、空であるか空でないかを確認します]
#!/bin/bashFILE="/etc/passwd"if ]; then echo "$FILE exists and not empty"else echo "$FILE doesn"t exist or is empty"fi
ファイルかどうかを確認します存在し、二重括弧を使用して空または空ではない
if ; then echo "$FILE exists and not empty"else echo "$FILE doesn"t exist or is empty"fi
2.2:方法2:テストコマンドを使用する
テストコマンドを使用して、-s
属性を組み合わせて確認します。ファイルが存在し、空であるか、コンテンツが含まれています:
2.3:方法3:単一行
このような1つのライナーには、二重ブラケットまたは単一ブラケットの両方を使用できますが、前に述べたように、二重ブラケットを使用することをお勧めします。
#!/bin/bashFILE="/etc/passwd"test -s $FILE && echo "$FILE exists and not empty" || echo "$FILE doesn"t exist or is empty"
テストコマンドと同様に、&&
と||
を使用できます。シェルスクリプト内の1行のコマンドでファイルをチェックする演算子。
#!/bin/bashFILE="/etc/passwd"] && echo "$FILE exists and not empty" || echo "$FILE doesn"t exist or is empty"
3. Bash / Shell:ディレクトリが存在するかどうかを確認します
Linuxではすべてがファイルであることをご存知だと思います。したがって、このように、ディレクトリもファイルと見なされます。 「-d
」属性を使用して、シェルプログラミングにディレクトリが存在するかどうかを確認できます。
3.1:方法-1:二重または単一の角かっこを使用する
-d
属性を単一のまたは二重括弧
]
内で使用して確認できますディレクトリが存在する場合。
#!/bin/bashDIR="/var/log"if ]; then echo "$DIR exists"else echo "$DIR doesn"t exist"fi
同様に、この例では単一の角かっこを使用して、ディレクトリがシェルスクリプト内で事前設定されているかどうかを確認します。
#!/bin/bashDIR="/var/log"if ; then echo "$DIR exists"else echo "$DIR doesn"t exist"fi
3.2:方法2:テストコマンドの使用
この例では、特定のタスクを実行する前に、testコマンドを使用してディレクトリが存在するかどうかを確認します。
#!/bin/bashDIR="/var/log"if test -d $DIR; then echo "$DIR exists"else echo "$DIR doesn"t exist"fi
3.3:方法3:単一行
この例では、単一行形式の単一括弧と二重括弧を使用して確認します。ディレクトリ用。 &&
演算子の後のステートメントは、最初の条件がTRUEの場合に実行され、FALSEの場合、||
条件のステートメントが実行されます。 。
#!/bin/bashDIR="/var/log"] && echo "$DIR exists" || echo "$DIR doesn"t exist"
の代わりに
]
を使用することをお勧めしますシェルプログラミングのこのような1つのライナーコードの場合。
&&
および||
と同様に、テストコマンドを使用して確認できます。ディレクトリが存在する場合
#!/bin/bashDIR="/var/log"test -d $DIR && echo "$DIR exists" || echo "$DIR doesn"t exist"
4.バッシュ/シェル:ディレクトリが存在するかどうかを確認します(空か空でないか)
シェル属性はありませんこのチュートリアルの他のすべての例とシナリオで使用したように。ただし、ディレクトリが空かどうかを確認するために使用できるハックがいくつかあります。
4。1:方法-1:ディレクトリの内容を一覧表示して確認する
この例では、ディレクトリの内容を一覧表示し、出力を抑制してから、終了コードに基づいてディレクトリが空であるか、いくつか含まれているかを確認します。 content
#!/bin/bashDIR="/tmp"if ls -1qA $DIR | grep -q . ; then echo "$DIR is not -empty"else echo "$DIR is empty"fi
NOT(!
)条件を設定することで、これを元に戻すこともできます。したがって、次のようになります。
#!/bin/bashDIR="/tmp"if ! ls -1qA $DIR | grep -q . ; then echo "$DIR is empty"else echo "$DIR is not-empty"fi
出力は両方のサンプルスクリプトで同じになります。
4.2:方法2:使用findコマンド
findコマンドを使用してから、出力を抑制して、ターゲットディレクトリにコンテンツがあるかどうかを確認できます。
#!/bin/bashDIR="/tmp"if find -- "$DIR" -prune -type d -empty | grep -q . ; then echo "$DIR is empty"else echo "$DIR is not-empty"fi
4.3:方法-3:コンテンツを一覧表示する
ここでも、ディレクトリが空であるか、一部の属性を使用していないかを確認する簡単な方法がないため、ディレクトリのコンテンツを一覧表示します。出力が得られない場合、ディレクトリは空であるか、空ではありません
#!/bin/bashDIR="/tmp"if ] ; then echo "$DIR is empty"else echo "$DIR is not-empty"fi
5.バッシュ/シェル:テストファイルの属性のリスト
同様に、シェルスクリプトで使用して、シンボリックリンク、ファイルのアクセス許可など、さまざまなファイルタイプを確認できる属性が他にもたくさんあります。
属性 | 機能 |
---|---|
-a FILE |
FILE が存在します |
-b FILE |
FILE が存在し、ブロック特殊ファイルです。 |
-c FILE |
が存在し、文字特殊ファイルです。 |
-d FILE |
True if FILE が存在し、ディレクトリです。 |
FILE が存在する場合はTrue |
|
-f FILE |
FILE が存在し、通常のファイルである場合はTrue |
-g FILE |
FILE が存在し、そのset-group-idビットが設定されている場合はTrue |
-h FILE |
FILE が存在し、シンボリックリンクである場合はTrue |
-k FILE |
FILE が存在し、その「スティッキー」ビットが設定されている場合はTrue |
-p FILE |
FILE が存在し、名前付きパイプ(FIFO) |
-r FILE |
FILE が存在し、読み取り可能 |
-s FILE |
FILE が存在し、サイズがゼロより大きい |
-u FILE |
FILE が存在し、そのset-user-idビットが設定されている場合はTrue |
-w FILE |
FILE が存在し、書き込み可能である場合はTrue |
-x FILE |
FILE が存在し、実行可能である場合はTrue |
-G FILE |
FILE が存在し、有効なグループIDによって所有されている場合はTrue |
-L FILE |
FILE が存在し、シンボリックリンクである場合はTrue |
-N FILE |
FILE が存在し、最後に読み取られてから変更されている場合はTrue |
-o FILE |
FILE が存在し、有効なユーザーが所有している場合はTrueユーザーID |
-S FILE |
FILE が存在する場合はTrueソケットです |
|
FILE1 とFILE2 が同じデバイスを参照している場合はTrue iノード番号 |
FILE1 -nt FILE2 |
FILE1 がFILE2 よりも新しい(変更日による)、またはFILE1 が存在してFILE2 が存在する場合not |
FILE1 -ot FILE2 |
FILE1 が古い場合はTrue FILE2 よりも大きい場合、またはFILE2 が存在し、FILE1 が存在しない場合 |