2012-05-03 10 views
1

、私も試してみましたこのArithmatic ExpressionをBash/Ubuntu 12.04で正しく書くには?私は何とかこの作業を行うことができない


((chunks = $size/$chunk_size + 1)) 
echo $chunks 

EDIT、

chunks = $(($size/$chunk_size + 1)) 

これは動作しますが、

while [ $counter -le 10 ]; do 
    echo $counter; 
    ((counter++)) 
done 

前者は私に/ 157286400 + 1 ")syntax error: invalid arithmetic operator (error token is "を与え、エラー自体は形式が正しくありません。

答えて

2

あなた$size変数を初期化したり、他の、数字以外の文字を持っていませんそれ。

$ chunk_size=157286400 
$ unset size 
$ ((chunks = $size/$chunk_size + 1)) 
-bash: ((: chunks =/157286400 + 1 : syntax error: operand expected (error token is "/ 157286400 + 1 ") 
$ size=$'\r' # carriage return 
$ ((chunks = $size/$chunk_size + 1)) 
/157286400 + 1 ")syntax error: operand expected (error token is " 

あなたはこのようなあなたのAWKのコマンドを変更することで、キャリッジリターンを削除することができます。

awk '/^Content-Length:/ { gsub("\015", "", $2); print $2 }' 
+0

はい、 '$ size'は数値以外の空白を持つことがあります。 $ headerはHTTPヘッダーで、 'detected_size = $(echo" $ header "| awk '/^Content-Length:/ {print $ 2}')'を実行しています。どのようにそれを修正するための任意の提案?どうもありがとう。 – Hindol

+0

@Hindol:AWKコマンドを次のように変更して、キャリッジリターンを削除することができます: 'awk '/^Content-Length:/ {gsub(" \ 015 "、" "、$ 2); print $ 2} '' –

+0

はい、動作します。これを反映するためにあなたの答えを更新できますか?他の人が参考になるかもしれません。 – Hindol

0

$サイズを確認し、初期化されます$ CHUNK_SIZE ... はテスト済み:

size=1 
chunk_size=2 
((chunks = $size/$chunk_size + 1)) 
echo $chunks 
+0

これらは両方ともまだ働いていない、初期化されます。 'echo $ size'と' echo $ chunk_size'は両方とも非ゼロ値を出力します。 – Hindol

0

はこれを試してみてください。

let size=10 
let chunk_size =2 
declare -i chunks 
let chunks = $(($size/$($chunk_size + 1)))) 
echo $chunks 
関連する問題