2014-01-25 3 views
0

Можно ли это сделать:Несколько команд в футляре?

case $ans1_1 in 
    y)fedoraDeps;; 
     echo "something here";; 
     make -j 32;; 
    n)echo "Continuing"...;; 
     ;; 
    *) echo "Answer 'y' or 'n'";; 
    esac 

Где fedoraDeps функция с yum команд.

Я пытаюсь повторить это с корпусами:

if [[ $ans1_1 = y ]]; then 
    fedoraDeps 
    echo "something here" 
    make -j 32 
elif [[ $ans1_1 = n ]]; then 
     echo "Continuing..." 
     : 
else 
    echo "Answer 'y' or 'n'" 
fi 
+3

Параметр '' ;; заканчивается случай. Не помещайте его в конец каждой строки, только последний в каждом случае. Просто Google «заявление о ситуации в bash» для получения более подробной информации. – lurker

+0

Завершите догадаться, но вы попытались использовать один ';', чтобы разграничить команды в отличие от двойного ';;', чтобы закончить дело? Или, если на то пошло, допустим новую строку без команд ';' delimit, которые, я думаю, будут в файле сценария. – IMSoP

+1

Я обычно помещаю закрытие ';;' на строку, чтобы выделить ее больше. –

ответ

6

; или линии подачи используется для завершения команды. ;; используется для завершения оператора case. Только не пытайтесь закончить дела заявление после каждой команды, и это хорошо:

case $ans1_1 in 
    y) 
     fedoraDeps 
     echo "something here" 
     make -j 32 ;; 
    n) 
     echo "Continuing"... ;; 
    *) 
     echo "Answer 'y' or 'n'" ;; 
esac 
+0

Будет ли использовать '' 'LF''' какие-либо проблемы с переносимостью? Будет ли скрипт работать в FreeBSD, Debian, Fedora, RHEL точно так же? – user3084450

+0

Этот синтаксис будет отлично работать во всех совместимых с POSIX оболочках. Независимо от того, имеет ли FreeBSD команда под названием fedoraDeps, другое дело. –

+0

'' 'fedoraDeps''' - это функция, определенная в верхней части файла, поэтому она не вызывает никаких проблем, спасибо! – user3084450

1

Из-за изменений в поведении оболочки я предлагаю использовать пробелы перед запятой ... Single «;» разрешите то, что вы хотите. Двойной ';' 'Конец' случай 'матч', т.е.

Это должно работать:

case $ans1_1 
in 
    y) fedoraDeps ; 
     echo "something here" ; 
     make -j 32 ;; ## last command for case 'match' 
    n) echo "Continuing"... ;; 
     ## if you want a blank line then just use one 
    *) echo "Answer 'y' or 'n'" ;; 
esac 
+3

Вставка пространства перед символом ';' не должна иметь никакого значения. –

+0

Какая оболочка не обрабатывает ';' как управляющий символ, позволяя ему быть частью предыдущего слова? – chepner

+0

Хм разумные комментарии; после ~ 30 лет работы со многими разновидностями * Nix (или * Nix-подобных ОС и оболочек) мой опыт отражает вещи, с которыми я столкнулся, т.е. если мы ограничим наше обсуждение текущей версией Bash, тогда да, комментарии действительны и мое можно просто игнорировать. :) –

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