0

ディレクトリ内のファイル数を調べ、追加操作も実行しようとしているbashスクリプトがあります。

しかし、同じことをしている間、次のようなエラーが発生します。

admin> ./fileCount.sh
       1
./fileCount.sh: line 6: 22 + : syntax error: operand expected (error token is " ")

私のスクリプトは次のとおりです。

#!/usr/bin/bash

Var1=22
Var2= ls /stud_data/Input_Data/test3 | grep ".txt" | wc -l 

Var3= $(($Var1 + $Var2))
echo $Var3

誰でもエラーがどこにあるかを指摘できますか。

4

2 に答える 2

3

少し離れて

@devnull がすでに質問に答えているので、どこにエラーがあるかを指摘しています

もう少しアイデア:

一般的な

この種のブラウジングを行うために、まさに探しているものを再帰的に見つけることができる非常に強力なコマンドがあります。find

Var2=`find /stud_data/Input_Data/test3 -name '*.txt' | wc -l`

これを再帰的にしない場合:

Var2=`find /stud_data/Input_Data/test3 -maxdepth 1 -name '*.txt' | wc -l`

ファイルのみが必要な場合(シンボリックリンクもディレクトリも必要ないことを意味します)

Var2=`find /stud_data/Input_Data/test3 -maxdepth 1 -type f -name '*.txt' | wc -l`

などなど... man ページをお読みください: man find.

特定ソリューション

あなたの質問はを表しているので、これをより速くするために使用できるいくつかのバシズムがあります:

#!/bin/bash

Var1=22

VarLs=(/stud_data/Input_Data/test3/*.txt)

[ -e $VarLs ] && Var2=${#VarLs[@]} || Var2=0

Var3=$(( Var1 + Var2 ))

echo $Var3

# Uncomment next line to see more about current environment
# set | grep ^Var

bash 展開は/path/*.txt、jocker フォームに一致するすべてのファイル名を含む配列に変換されます。

フォームに一致するファイルがない場合VarLsは、ジョッカー フォーム自身のみが含まれます。

したがって、テスト-eはこれを修正します。返されたリストの最初のファイルが存在する場合は、リスト内の要素の数 ( ${#VarLs[@]}) をVar2割り当て0ますVar2

于 2013-10-07T05:28:25.280 に答える
2

誰でもエラーがどこにあるかを指摘できますか。

  • の前後にスペースを入れないでください=
  • おそらく、コマンド置換を使用して結果をVar2.

試す:

Var1=22
Var2=$(ls /stud_data/Input_Data/test3 | grep ".txt" | wc -l)

Var3=$(($Var1 + $Var2))
echo $Var3

さらに、次のようにも言えます。

Var3=$((Var1 + Var2))
于 2013-10-07T05:07:34.617 に答える