2015-12-08 1 views
0

Я пытаюсь читать от пользователя, а затем делать следующее.преобразовать строку чтения в целое число в bash

read framechoice 
if [ $framechoice -gt 100 ]; then 
    if [ $framechoice -lt 0 ]; then 
      framechoice=101 
    fi 
fi 

Это приносит мне ошибку.

[: -gt: ожидается унарный оператор

Может кто-нибудь сказать мне, где я неправильно.

ответ

1

Это происходит, если вы этого не сделаете ничего ввода:

$ cat myscript 
read framechoice 
if [ $framechoice -gt 100 ]; then 
    if [ $framechoice -lt 0 ]; then 
      framechoice=101 
    fi 
fi 
$ bash myscript 
<enter> 
myscript: line 2: [: -gt: unary operator expected 

Попробуйте вместо того, чтобы фактически ввести что-то:

$ bash myscript 
42<enter> 

Скрипт выходит с успехом.

1

Ваша программа должна справиться с пустым вводом. Это наиболее легко достигается properly quoting the variable; Затем

if [ "$framechoice" -gt 100 ]; then 

[ "" -gt 100 ] принимает значение, которое больше не является синтаксической ошибкой; однако вместо этого он выдает предупреждение integer expression expected.

Еще лучше, возможно, фильтровать входные данные, чтобы вы не пытались сравнивать число до making sure the input is numeric.

Смежные вопросы