2016-03-23 9 views
-1

私はFibonacciシリーズ(0 1 1 2 3 5 8)用に1つのLinuxコードを書いています。Linux if-else not working

#!/bin/bash 
#This program will show series of Fibonacci numbers upto user input. 

echo -n "Enter the number for Fibonacci series: " 

read num 

if [ $# = 1 ] 
then 

x1 = 0 
x2 = 1 

echo "The Fibonacci series for the number $num is: "  

for ((y=0;$y<num; y=$y+1)) 
do 
echo -n "$x1 " 
x2 = $(($x2 + $1)) 
x1 = $(($x2 - $x1)) 

done 

else 

echo "Input is wrong" 

fi 

satementが、私はライン10と11のエラーを持って、ループ

+1

整数を代数的に比較する '-eq'を使用してください。 '='は文字列の比較に使用されます。詳細は 'man test'を参照してください。 – bnaecker

+0

私は最初に論理を理解していません。コマンドラインで期待される引数は何ですか?そして、それはnumのためのfibを計算することにどのように関連しますか? – tink

+0

予想される引数は、4,5,6などのような数であり、その数を上回ってループして、その数多くの数を生成します。たとえば、ユーザーが4を入力した場合、ユーザーは4つのフィックス・ナンバーを取得します –

答えて

2

のための私は、なぜあなたは引数の数をチェックしているか分からないが、あなたのいずれかを提供する必要がある場合、私は削除する場合1つの引数をチェックするか、ゼロの引数をチェックするためにそれを変更します。また、問題の原因となるスペースがいくつかあります。それらを削除する必要があります。最後に、@bnaeckerが述べたように、数値平等を比較するときは=の代わりに-eqを使用します。

#!/bin/bash 
#This program will show series of Fibonacci numbers upto user input. 

echo -n "Enter the number for Fibonacci series: " 

read num 

if [ $# = 0 ] 
then 

x1=0 
x2=1 

echo "The Fibonacci series for the number $num is: "  

for ((y=0;$y<num; y=$y+1)) 
do 
echo -n "$x1 " 
x2=$(($x2 + $1)) 
x1=$(($x2 - $x1)) 

done 

else 

echo "Input is wrong" 

fi 
+0

これは今働きました –

+0

これは動作しているかもしれませんが、ロジックには本質的に欠陥があります。 :} – tink

+1

@tink、本当ですが、SOの質問に答えるときは、私の答えを最小限に抑えたいと思っています。経験を積んだプログラマは、自分で間違いを改善して学ぶ傾向があります。 –