if文の処理

if文の処理

コードを強化しました質問以前に投稿したことがあります。

私のコードは次のとおりです

DIR="$1"


if [ -e "$DIR" ]

then

     echo -n "total directories:" ; find $DIR -type d | wc -l

     echo -n "total files:" ; find $DIR -type f | wc -l
else
if [ -f "$DIR" ]
then
    echo " Directory doesn't exist"

else
     echo  " please pass correct arguments"
fi
fi

./countfiledirsorを実行すると、次のコードが出力されますcountfiledirs jhfsakl

sreekanth@sreekanth-VirtualBox:~$  ./countfiledirs 
 please pass correct arguments
sreekanth@sreekanth-VirtualBox:~$  ./countfiledirs ffff
 please pass correct arguments

スクリプト名を実行するときに./countfiledirs出力したい。

please pass correct arguments

./countfiledirs ffff次の場合:

directory doesn't exists

スクリプトを実行すると、コードに別の問題があります./countfiledirs /usr/share。私が提供したパスの実際のディレクトリとサブディレクトリの数は提供されません。 3つの代わりに4つのディレクトリを表示

ベストアンサー1

存在する場合は真である[ -f "$DIR" ]かどうかをテストします。$DIRファイルです。それはあなたが望むものではありません。前の質問で提案したように、パラメータが渡されたことを$#確認するために使用する必要があります。その後、以下を使用して-eパラメーターが存在することを確認できます。

次の号には現在のカタログもfindリストされています。これを防ぐためにGNUを.使用できます。-mindepth 1find

DIR="$1"

if [ $# -lt 1 ]
then
    echo "Please pass at least one argument" && exit   
fi
if [ -e "$DIR" ]
then
     echo -n "total directories:" ; find "$DIR" -mindepth 1 -type d | wc -l
     echo -n "total files:" ; find $DIR -type f | wc -l
else
      echo "Directory doesn't exist"
fi

上記を次のように圧縮することもできます(このバージョンはディレクトリではなく、存在しないディレクトリとファイルを区別しませんが)。

dir="$1"
[ $# -lt 1 ] && echo "Please pass at least one argument" && exit
[ -d "$dir" ] && printf "total directories: %s\ntotal files:%s\n" \
              $(find "$dir" -type d | wc -l) $(find "$dir" -type f | wc -l) ||
    printf "%s\n" "There is no directory named '$dir'."

おすすめ記事