2017-06-26 7 views
0

私はShellScriptingで新しく、次のようなスクリプトを作成しました。これは単純なものに基づいて作成したものです。パスを引数に渡してカウントファイルに渡したいと思っています。それが正しい動作させるために私の論理的な間違いを見つけることができない、出力を使用すると、ディレクトリ内のファイルの数をカウントしたい場合、私は

sh scriptname.sh /path/to/folder/to/count/files 
+0

は、httpで 'let'のエントリを参照してください。 .bash-hackers.org/scripting/obsolete –

+0

ありがとう、私はしばらくそれを読む:) – Fr0stitute

答えて

0

を使用するコードを実行するには、常に「1」

#!/bin/bash 

i=0 

for file in $0/* 
do 
    let i=$i+1 
done 

echo $i 

です

ls /path/to/folder/to/count/files | wc -l

+0

これは、引数を使用するスクリプトの実例です。個人的には私はそれを使用しますが、大学は私にスクリプトを要求します:( – Fr0stitute

1

$0があなたのスクリプトが、おおよそ(いくつかのexceptioの対象に呼び出されたときの名前です、あなたはこのような何かを実行することができますここでは関係のないns)。最初の引数は$1なので、glob式で使用したいのは$1です。

あなたはより直接的にこの番号を取得することができ、言っ
#!/bin/bash 
i=0 
for file in "$1"/*; do 
    i=$((i + 1))  ## $(()) is POSIX-compliant arithmetic syntax; let is deprecated. 
done 

echo "$i" 

#!/bin/bash 
shopt -s nullglob # allow globs to expand to an empty list 
files=("$1"/*) # put list of files into an array 
echo "${#files[@]}" # count the number of items in the array 

...あるいは://ウィキ:

#!/bin/sh 
set -- "$1"/*      # override [email protected] with the list of files matching the glob 
if [ -e "$1" ] || [ -L "$1" ]; then # if $1 exists, then it had matches 
    echo "$#"       # ...so emit their number. 
else 
    echo 0        # otherwise, our result is 0. 
fi 
+0

ありがとうございます!それは完璧に動作し、小さな事を学ぶのに素晴らしいコメントです:) – Fr0stitute

+0

最初の1つでは、ディレクトリが空の場合は-1を返しますが、後者の2つは0を返します(なぜなら、 'nullglob'または' -e'/'-L'のためにテストを使用するからです)。 –

関連する問題