2013-07-19 2 views
2

Я пытаюсь поймать набранную ошибку ниже test.sh сценария оболочки:обработки ошибок в сценариях оболочки с набранной

Shell Script

typeset -i int 
int=2 
echo $int 
int=asd || echo "type mismatch" 

Но я получаю выход как:

Выход

./test.sh 
2 
./test.sh[4]: asd: bad number 

Обязательный Результат

./test.sh 
2 
./test.sh[4]: asd: bad number 
**type mismatch** 

Я использую следующую машину:

bash --version 
GNU bash, version 3.2.51(1)-release (sparc-sun-solaris2.10) 
Copyright (C) 2007 Free Software Foundation, Inc. 

Пожалуйста, предложите мне изменение мне нужно сделать в моем сценарии. Мне нужно, чтобы входной параметр был INT. И я должен использовать набор типов вместе с обработкой исключений.

+0

Какую оболочку вы используете? –

+0

@glennjackman Это в вопросе. Bash 3.2.51 (1) на спар-солнечном солнечном свете2.10. – michaelb958

+0

oops. tl; dr my bad –

ответ

1

Попробуйте использовать Eval:

typeset -i int # Using the name "int" just seems like asking for trouble! 
eval int="$1" || echo "type mismatch" >&2 

Вопрос заключается в том, что в строке int=asd || ..., первая простая команда всегда будет вычисляться true в соответствии с требованиями стандарта, так как ни одна команда не задана. Переменные назначения выполняются в текущей оболочке, но команда не указана, и результаты указаны в разделе 2.9.1:

Если есть имя команды, выполнение должно продолжаться, как описано в Поиске и выполнении команд. Если нет имени команды, но команда содержит подстановку команд, команда должна завершить статус выхода последней выполненной подстановки команды. В противном случае команда должна иметь нулевой статус выхода.

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