2012-03-18 106 views
-1

代碼:無輸出以下代碼

echo -n "Enter the number you want to search for" 
read number1 
for i in `seq 1 $N` 
do 
    temp= $number1 
    if [ temp -eq ${array[$index]} ] 
    then 
    temp= $index 
    fi 
done 

echo " The position is" $temp 

我DONOT得到這個 只是位置的輸出,沒有數。 我在做什麼錯?

+1

是什麼'$ N'包含 – 2012-03-18 12:19:48

+0

插入'設置-eu'在代碼的頂部,看看你得到一些錯誤消息。這也會在其他許多情況下幫助你。 – 2012-03-18 12:21:29

+0

$ N是數組的長度。我尋找輸入號碼是否存在於陣列中的與否 – simplycurious 2012-03-18 12:24:54

回答

3

這裏有幾個大的問題。

空白的分配。一個問題是,這些行:

temp= $number1 

    temp= $index 

需要是這樣,而不是:

temp=$number1 

    temp=$index 

這是因爲Bash中,這樣的事情:

varname=value command 

運行命令command環境變量varname設置爲value。在你的情況下,這樣的:

temp= $number1 

試圖可變temp組運行命令$number1與環境爲空字符串。

重用臨時變量。另一個問題是,這條線:

temp=$number1 

運行在每一次通過循環;因此,即使temp先前已設定爲適當的數組索引,上述將丟棄該值並與用戶已經輸入的號碼替換它。真的,你應該刪除這條線,並在需要時直接使用$number1

變量名不匹配。另一個問題是,這條線:

for i in `seq 1 $N` 

i使用用於循環變量,但這些行:

if [ temp -eq ${array[$index]} ] 
    then 
    temp= $index 

使用index。不用說,這些需要匹配。

未膨脹變量。這條線:

if [ temp -eq ${array[$i]} ] 

被可靠地意思是這樣的:

if [ $temp -eq ${array[$i]} ] 

(擴大可變$temp而不是使用串'temp');但在上述的光,它現在應該:

if [ $number1 -eq ${array[$i]} ] 

陣列索引。數組索引從零開始;所以如果N是陣列中元素的數量,那麼你需要從0迭代到N -1。所以,這樣的:

for i in `seq 1 $N` 

需求是這樣的:

for i in `seq 0 $((N - 1))` 

雖然我真的認爲你應該得到完全擺脫N,並使用${#array[@]}(這是一個bash的符號,意思是「元素的數量在array)代替:

for i in `seq 0 $((${#array[@]} - 1))`