2015-10-02 4 views
0

Это простой школьный проект. Консоль поддерживает заявив [5: команда не найденаBash while loop error

#!/bin/bash 

num=28 
echo "Guess a number a number between 1 and 100" 
read guess 

while [$guess -ne $num] 
do 

if [$guess -lt $num] 
then 
    echo "number is higher" 
elif [$guess -gt $num] 
then 
    echo "number is lower" 
    else 
    echo "Correct! The number is $number" 
    fi 

done 
+0

Вам необходимо включить команду трассировки, чтобы увидеть, что вы делаете. Вы не процитировали скрипт, поэтому я должен угадать о разделении команд, но я не думаю, что перед командой «читать» (т. Е. Точка с запятой или новая строка) есть разделение команд. В любом случае добавьте строку «set -x». –

ответ

2
while [$guess -ne $num] 

интерпретируется первое расширение параметров:

while [5 -ne 28] 

, который затем вызывает команду [5, которая будет выполнена, передавая ему аргументы -ne и 28]

Вы хотели выполнить команду [, поэтому вам нужно было написать:

while [ $guess -ne $num ] 

(обратите внимание на пробелы вокруг обоих [ и ]. Без пробела символы становятся частью другого слова.)

Ditto с заявлениями, указанными ниже if и elif.

+0

спасибо. Я не понимал, что нужно расстояние, чтобы понять условие – keebler

+0

@keebler: важным выводом является '' '' _command_. Как персонаж, он не особенный; '[23' была бы другой командой, которую вы могли бы реализовать как исполняемый файл с этим именем. Если вы посмотрите вокруг, вероятно, в '/ usr/bin', вы найдете файл с именем' ['. – rici

0

ли это:

#!/bin/bash 
num=28 
echo "Guess a number a number between 1 and 100" 
read guess 

while [ $guess -ne $num ]; do 
    if [ $guess -lt $num ] 
    then 
    echo "number is higher" 
    read guess 
    elif [ $guess -gt $num ] 
    then 
    echo "number is lower" 
    read guess 
    fi 
done 
echo "Correct! The number is $number"