2014-02-03 2 views
0

Я могу получить ответ в командной строке, если только использовать условие IF. Но если добавить Элиф, командная строка остается открытым & не заканчивается ...Unix Bash Если инструкция else не работает

код я использовал ...

-bash-3.00$ if [ "1" == "1" && "$cont" == "1" ]; then 
> echo "I am if" 
> elif [ "$cont" == "1"" ]; then 
> echo "I am else" 
> fi 
> 
> 

Ожидаемый результат: Это должно закончиться & обратный эхо-сигнал;

+1

У вас есть опечатка. 'elif [" $ cont "==" 1 ""], затем 'One 'too many – RedX

+0

Является ли двойная двойная кавычка после 1 в состоянии elif там специально? –

+0

Хотя я меняю его, -bash: [: missing '] ' – logan

ответ

3

Вы можете либо изменить && в -a:

$ cont=1 
$ if [ "1" = "1" -a "$cont" = "1" ]; then echo "ha"; fi 
ha 

Или использовать два отдельных [ команды:

$ if [ "1" = "1" ] && [ "$cont" = "1" ]; then echo "ha"; fi 

Или использовать двойные скобки:

$ if [[ "1" == "1" && "$cont" == "1" ]]; then echo "ha"; fi 
ha 

Также обратите внимание на " слишком многие из вас в вашем eli f, as RedX comments.

+0

Использовать Else if; Я сказал, что он работает только для IF ... все тот же: -bash-3.00 $, если ["1" == "1" -a "$ cont" == "1"]; то > эхо «Я, если» > Элиф [ «$ продолжение» == «1»»], а затем > эхо„Я еще“ > еще > эхо„Я из“ > фи > > – logan

+0

У него явно есть опечатка в его коде. – RedX

+0

Это был не я, который был опущен. – RedX

2

elif [ "$cont" == "1"" ]; then недействителен; котировки всегда должны прийти в парах:

elif [ "$cont" == "1" ]; then 

, что дает:

if [ "1" == "1" && "$cont" == "1" ]; then 
echo "I am if" 
elif [ "$cont" == "1" ]; then 
echo "I am else" 
fi 

, который терпит неудачу с bash: [: missing ']'

Причиной является первой линией. Вы используете одного [ что означает BASH видит:

if [ "1" == "1" 
pipe (&&) 
"$cont" == "1" ]; then 

Попробуйте

if [[ "1" == "1" && "$cont" == "1" ]]; then 
echo "I am if" 
elif [[ "$cont" == "1" ]]; then 
echo "I am else" 
fi 

Сингла [ является старой ошибкой функцией от Bourne времен оболочки. Они создают всевозможные проблемы, которые были решены с помощью синтаксиса [[...]].

Если вы не знаете, что делаете, избегайте одиночных [ и синтаксиса backtick (вместо этого используйте $(cmd...)).

Совет. Чтобы отладить такие вещи, используйте set -x, чтобы оболочка печатала каждую команду, когда она ее видит.

+0

Хотя я меняю его., Он говорит, что отсутствует '; -bash-3.00 $ if [" 1 "==" 1 "&&" $ cont "==" 1 "], затем > echo" I Я, если» > Элиф [ "$ продолжение" == "1"], а затем > эхо "Я еще" > еще > эхо "Я из" > фи -bash: [: отсутствует'] ' Я отсутствую -bash-3.00 $ – logan

+0

@logan У вас есть пробел между последней меткой кавычки и ']'? – chepner

+0

@chepner: yes У меня есть – logan

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