2012-03-24 14 views
0

私はbashスクリプトに慣れていて、いくつかのことを学びたいと思っています。ここでは、私が試したコードです:whileループのbash

n=$1 
shift 

echo "Printing your name $n times" 
count=1 
for ((i=1;i<=$n;i++)) 
do 
    echo [email protected] -$i 
    count='expr[$count+1]' 
done 

echo 'New Model' 
count=1 
while ["$count" -le "$n"] 
do 
    echo [email protected] -$i 
    count='expr[$count+1]' 
done 

ループはうまく動作しますが、whileループは目的の結果を印刷していません。 forループとwhileループの結果は同じでなければなりません。私が間違っている場所を教えてください。ありがとうございました。

答えて

3

1つの問題は、角かっこの周囲にスペースが必要なことです。そのため、bashは別の単語であることが分かります。それは、これを変更します

while ["$count" -le "$n"] 

これに:

count='expr[$count+1]' 

実際に特定の文字列expr[$count+1]に変数countを設定します。

while [ "$count" -le "$n" ] 

もう一つは、これがあることです。何を意味するように見えることはこれです:

count=$((count+1)) 

1.

+0

'['実際に '/ binに/ test'へのリンクです(OK、' bash'で、それは組み込みのだが、それがどこから来るものです)。だから ''は単語(ちょうど 'ls'のようなもの)なので、それはスペースが必要な理由です。 –

+0

@BenJackson:スペースがなくてもスペースが必要だと思います。 '[['はスペースを必要としますが、それは他の方法では*魔法でもあります。 – ruakh

+0

ちょっと、情報ありがとう、ありがとう、私は理解していないものは、count = 'expr [$ count + 1]'はforループで動作しましたがwhileループでは動作しませんでした。ありがとうございました。 – surpavan

1

によってcountの値を増加させる、これを試してみてください。

count=1 
while [ "$count" -le "$n" ] 
do 
echo [email protected] -$i 
count=`expr $count + 1` 
done 

while状態でスペースが必要です。 countのインクリメントは、コマンドを実行して変数に割り当てるために、一重引用符ではなく、逆引用符を必要とします。

2

変数をインクリメントする別の方法:

#!/bin/bash 

count=1 

#count=`expr $count + 1 ` 
#((count++)) 
#count=$[$count + 1] 
#count=$[count + 1] 
#let count=count+1 
#let count++ 
#count=$((count + 1)) 

echo $count