2016-09-04 5 views
1

Работает над этим: Простая игра для эха случайного символа клавиатуры; то пользователь должен совместить этот символ как можно быстрее (это еще не реализовано (очевидно), но это цель) и сохранить текущее количество «правильных совпадений».Выполнение символа случайной строки символом?

#!/bin/bash 
score=0 
while true; do 
clear 
echo "$score" 
character=$(</dev/urandom tr -dc '1234567890{}[]`~\/><[email protected]#$%^&*()_+=-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' | head -c1) 
echo "$character" 
read -rsn1 input 
if [ "$character" = "$input"]; then 
    echo "[+]" 
    score ++ 
    sleep 1 
else 
    echo "wrong!" 
    score=0 
    sleep 1 
fi 
done 

Непосредственно, мой вопрос: Почему я получаю

[: missing `]' 

ошибку. Я перепробовал все варианты

if [ "$character" = "$input" ]; then 

и второй вопрос: Как бы я правильно задать свой следующий вопрос, который: дал длинную случайную строку, как бы один «взрываются», что строка таким образом, что она имеет пространство между каждым персонажем? У меня нет опыта/лексики для описания этой операции.

Большое спасибо!

+0

http://www.shellcheck.net/ является вашим другом :-) – andlrc

ответ

1

Там должен быть пробел перед ], как это:

if [ "$character" = "$input" ]; then 

Кроме того, чтобы положить Баш в режиме арифметической, замените эту строку:

score ++ 

с:

((score ++)) 
+1

Если бы OP добавил это пространство, то эта часть o f код работал бы. Другая необходимая поправка - 'score ++' -> '((score ++))'. – John1024

+0

@ john1024 ты меня на правильном пути. К сожалению, все равно нет. – archae0pteryx

+1

С этими двумя исправлениями ваш код работает для меня. _ «К сожалению, все равно нет» _ При диагностике компьютерных проблем неопределенность не помогает: что не «уходило»? Было ли еще сообщение об ошибке? Если да, то что это было _exactly_? Или это бежало, а не делать то, что вы ожидаете? Если да, то что он сделал? И как это отличалось от ожидаемого? – John1024