
スクリプト実行時にパラメータを処理する方法
私のコードは次のとおりです
#!/bin/bash
DIR="$1"
if [ DIR eq $1 ]
then
echo -n "total directories:" ; find $DIR -type d | wc -l
echo -n "total files:" ; find $DIR -type f | wc -l
else
echo " pass parameters"
fi
スクリプト名()を使用して実行すると、./countfiledirs
次のように読み取られます。
./countfiledirs: line 4: [: DIR: unary operator expected
pass parameters
パラメータを渡さずに実行すると、./countfiledirs
次のように表示されます。
pls pass arguments.
./countfiledirs を実行し、引数を ./countfiledirs /usr/share に渡すと、次のような出力が表示されます。
total directories:145
total files:254
答え1
エラーは次のとおりです。
if [ DIR eq $1 ]
変数を使わずに単純な文字列ですDIR
。あなたが望むもの:
if [ "$DIR" = "$1" ]
ただし、これを設定しているため、DIR="$1"
定義に応じてこのテストは常にtrueです。また、$1
空の場合、現在のディレクトリでも$DIR
コマンドがfind
実行されます。多くのバージョンでは、find
次のコマンドは同じです。
find . -name foo
find -name foo
宛先ディレクトリがない場合は、現在のディレクトリをfind
検索します.
。したがって、スクリプトの作業バージョンは次のようになります。
#!/bin/bash
## Avoid using UPPER CASE variable names in bash.
dir="$1"
## Check if $dir exists
if [ -e "$dir" ]
then
printf "total directories: %s\n" $(find "$dir" -type d | wc -l)
printf "total files: %s\n" $(find "$dir" -type f | wc -l)
else
echo " pass parameters"
fi
Bashスクリプトに渡された引数の数は、次のように$#
保存されます。
if [ $# -lt 1 ]
then
echo "pass parameters"
exit
fi