2012-03-18 3 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 

я получить выигрыш выход для этого только положение не является и не числом. Что я делаю неправильно?

+1

что делает '$ N' содержит –

+0

Вставить' установить -eu' в верхней части кода и посмотреть, если вы получаете некоторые сообщения об ошибках. Это поможет вам и во многих других ситуациях. –

+0

$ N - длина массива. Я ищу, присутствует ли в массиве число входных или не – simplycurious

ответ

3

Здесь есть несколько больших проблем.

Пробел в задании. Одна проблема заключается в том, что эти строки:

temp= $number1 

    temp= $index 

нужно быть, как это вместо:

temp=$number1 

    temp=$index 

Это происходит потому, что в Bash, что-то вроде этого:

varname=value command 

запускает команду command с переменной окружения varname установлена ​​в value. В вашем случае, это:

temp= $number1 

пытается выполнить команду $number1 с переменным окружением temp набора в пустую строку.

Повторное использование временной переменной. Другая проблема заключается в том, что эту линию:

temp=$number1 

выполняется на каждом проходе цикла; поэтому даже если temp ранее был установлен в соответствующий индекс массива, вышеуказанное отклонит это значение и заменит его номером, который был введен пользователем. Действительно, вы должны просто удалить эту строку и использовать $number1 непосредственно, когда вам это нужно.

Несоответствие переменных имен. Другая проблема заключается в том, что эта линия:

for i in `seq 1 $N` 

использует i для переменного цикла, но эти строки:

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

использование index. Излишне говорить, что они должны соответствовать.

Unexpanded variable. Эта линия:

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))` 
Смежные вопросы