2014-12-02 3 views
1

Если у меня есть скрипт (оболочка bash) и вы хотите проверить, проходит ли аргумент в пределах диапазона чисел, как мне сделать это с помощью операторов case? Например, мой скрипт будет выполнять ряд команд, только если введенный аргумент - это номера 10-20, в противном случае возвращается сообщение об ошибке. Я могу сделать это с инструкциями If, но хотел бы знать, как это сделать с аргументами case. Я прочитал другие страницы, но это не имеет смысла делать:Проверка переменной с использованием оператора case

case $1 in 
10 
*command executed 
11 
*command executed 
etc... 

ответ

4

Попробуйте сделать это:

if (($1 >= 10 && $1 <=20)); then 
    echo "Correct range" 
else 
    echo >&2 "Incorrect range" 
fi 

Я использую bash arithmetic. Использование инструкции case выглядит несколько неэффективно.

Если вы настаиваете, чтобы сделать это капелька case:

case $1 in 
    1[0-9]|20) echo "Correct range" ;; 
    *) echo >&2 "Incorrect range" ;; 
esac 
2

Вы можете использовать квадратные скобки, чтобы указать список возможных значений:

case $1 in 
1[0-9]|20) 
    echo "All is well. I will run the command." 
    ;; 
*) 
    echo "All is not well! You are a fool to tell me such a number!" 
    ;; 
esac 

Подробнее о случае заявления in the Bash Beginner's Guide

+0

Оба предложения работают, спасибо! – swam

1

использование $((...)) может быть полезным:

case 1 in 
    $(($1 >= 10 && $1 < 20))) echo '10-19';; 
    $(($1 >= 20 && $1 < 30))) echo '20-29';; 
    $(($1 >= 30 && $1 < 40))) echo '30-39';; 
esac 
Смежные вопросы