なぜ私はこれを受けているのか分かりません。私はこれが一般的な問題であるに違いないことを知っていますが、それを理解することはできません。
#!/bin/bash
#Checks word count of each text file directory and deletes if less than certain amount of words
#Lastly, displays number of files delter
count = 0 #Set counter to 0
limit = 2000
for file in *.txt
do
words = wc -w > $file
if words < $limit
rm $file
count = $count + 1
end
end
print "Number of files deleted: $count"
ベストアンサー1
残念ながら、あなたのスクリプトに構文エラーがいっぱいです。あなたが見ている特定のエラーはfor
ループを正しく閉じていないためですが、それ以外にははるかに多くのエラーがあります。
=
変数に値を割り当てるときはスペースを使用できません(算術式を除く)。- コマンドの出力を変数に保存するには、以下を使用する必要があります。コマンドの置き換え、
var=`command`
いずれかvar=$(command)
。 - 変数の値を引用するときは、代わりに
$var
を使用する必要があります。var
通常、"$var"
引用符()で囲む必要があります。 - として算術比較、二重角かっこを使用
-lt
しない限り、コマンドを使用する必要があります。[
<
- この
command > file
形式はfile
コマンドの出力で上書きされます。wc < "$file"
代わりに使用したいかもしれませんwc > $file
。 var=$var+1
変数が以前に整数として宣言されていない場合、変数に値を使用または追加すること((var=var+1))
はできません。 1を追加するには、次のものを使用することもできます。var=$((var+1))
declare -i var; var=var+1
((var++))
- 構文
if
が正しくありません。正しい形式は次のとおりです。if condition; then do something; fi
- forループでも同様です。
for
正しい構文は次のとおりです。for loop-specification; do something; done
- コマンドはありません
print
(とにかくbashに組み込まれていません)。ただprintf
とecho
; - あなたはする必要があります常に変数を引用してください。そうしない妥当な理由がなければです。
したがって、スクリプトの少し改善された作業バージョンは次のとおりです。
#!/bin/bash -
# Checks word count of each text file directory and deletes if less than certain amount of words
# Lastly, displays number of files deleted
count=0 # Set counter to 0
limit=2000
for file in *.txt
do
words=$(wc -w < "$file")
if [ "$words" -lt "$limit" ]
then
rm -- "$file"
((count++))
fi
done
echo "Number of files deleted: $count"
次に、コーディングを試みる前に言語に慣れることをお勧めします。すべての言語には独自の規則と文法があります。