Склоняем слова в зависимости от числа

Искусство написания bash скриптов. Делимся своими наработками
Ответить
Аватара пользователя
ZEN
Администратор
Сообщения: 1349
Зарегистрирован: 27 сен 2012, 18:23
Темы: 206
Откуда: Украина, Одесса
Статус: Не в сети

Склоняем слова в зависимости от числа

Сообщение ZEN » 26 мар 2015, 22:55

Код: Выделить всё

#!/usr/bin/env bash

function declOfNum() {
    test $# -eq 1 || {
        echo "ERROR: declOfNum function expect 1 params" 1>&2;
        exit 1;
    };

    local NUM="$1";
    (( ( $NUM % 100 ) > 4 && ( $NUM % 100 ) < 20 )) && {
        echo 2;
    } || {
        local CASES=( 2 0 1 1 1 2 );
        local i=$(( ($NUM % 10) < 5 ? ($NUM % 10) : 5 ));
        echo ${CASES[i]};
    }
    return 0;
}

TRIES="$1";
STRINGS=(
    "Осталась _{{NUM}} попытка"
    "Осталось _{{NUM}} попытки"
    "Осталось _{{NUM}} попыток"
);
IDX="$(declOfNum $TRIES)" || exit 2;

(( ${#STRINGS[$IDX]} > 0 )) && {
    echo ${STRINGS[$IDX]} | sed "s/_{{NUM}}/$TRIES/g";
} || {
    echo "ERROR: Translation was not found" 1>&2;
    exit 3;
};

exit 0;
Пример работы скрипта:
zen@devel:~$ for i in $(seq 0 1 9); do ./declOfNum.sh $i; done
Осталось 0 попыток
Осталась 1 попытка
Осталось 2 попытки
Осталось 3 попытки
Осталось 4 попытки

Осталось 5 попыток
Осталось 6 попыток
Осталось 7 попыток
Осталось 8 попыток
Осталось 9 попыток
бог создал труд и обезьяну
чтоб получился человек
а вот пингвина он не трогал
тот сразу вышел хорошо

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей