/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
以下を使用して、ディレクトリの存在を確認できます。
_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" ]
_を使用します)。
シェルスクリプトにディレクトリが存在するかどうかを確認するには、次を使用できます。
dir=$1
if [ -d "$dir" ]; then
#means that $dir exists.
fi
反対を確認するには、追加してください! -dの前-> [ ! -d ....]
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/
と同じであることに注意してください。