2015-02-16 2 views
1
filter="yes" 
phonenumbers=(123 456 789 987 654 321) 
echo "checking inbox now..." 
myphonenumber=(7892) 

if [[ "$filter" == "yes" ]]; then 
    case "${phonenumbers[@]}" in 
     *"$myphonenumber"*) echo "filter is on, phone number matches" 
     ;; 
     !="$myphonenumber") echo "filter is on but the phone number doesn't match" 
     ;; 
    esac 
fi 

if [[ "$filter" == "no" ]]; then 
    echo "filter off" 
fi 

Я пытаюсь запустить этот скрипт, но он не работает, как я должен показать часть filter is on but the phone number doesn't match? Я все еще учился, я знаю, что могу это сделать с помощью if else, но мне интересно, могу ли я сделать это с case тоже.Как сделать «else» в команде bash case?

+0

Я редактировал свой сценарий, чтобы улучшить свой отступ. Надеюсь, это поможет вам лучше понять, что делают наклейки на самом деле (чтобы сделать его даже дистанционно доступным для чтения). –

+1

Это упоминается (хотя и не заметно) в руководстве [bash manual] (https://www.gnu.org/software/bash/manual/html_node/Conditional-Constructs.html): «Это распространенная идиома для использования» * 'как окончательный шаблон для определения случая по умолчанию, так как этот шаблон всегда будет соответствовать. " –

ответ

2

решаемые с этим *) поэтому весь код:

filter="yes" 
phonenumbers=(123 456 789 987 654 321) 
echo "checking inbox now..." 
myphonenumber=(7892) 

if [[ "$filter" == "yes" ]]; then 
    case "${phonenumbers[@]}" in 
    *"$myphonenumber"*) echo "filter is on, phone number matches" ;; 
    *)     echo "filter is on but the phone number doesn't match" ;; 
    esac 
fi 

if [[ "$filter" == "no" ]]; then 
    echo "filter off" 
fi 
+0

Новые строки помогут читаемости здесь немного. –

+0

Да, спасибо, я только что редактировал свой код, чтобы выглядеть более понятным сейчас. – Lin

+0

Надеюсь, вы простите меня за внесение еще нескольких изменений в эти строки. Кстати, это домашнее задание? Я видел, как кто-то еще совсем недавно задал почти идентичный вопрос. –

1

Если вы ищете что-то похожее на default постановки switch в C-подобный язык, следующий должен справиться с этим. Соблюдайте пункт *).

Для немного справки http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_03.html

filter="yes" 
phonenumbers=(123 456 789 987 654 321) 
echo "checking inbox now..." 
myphonenumber=(7892) 

if [[ "$filter" == "yes" ]]; then 
    case "${phonenumbers[@]}" in 
     *"$myphonenumber"*) echo "filter is on, phone number matches" 
     ;; 
     *) echo "filter is on but the phone number doesn't match" 
     ;; 
    esac 
fi 

if [[ "$filter" == "no" ]]; then 
    echo "filter off" 
fi 
Смежные вопросы