Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Не могу разобраться с циклом BASH  (Прочитано 649 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ilyablbnv

  • Автор темы
  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Не могу разобраться с циклом BASH
« : 05 Января 2016, 00:53:41 »
Доброго времени суток! Помогите разобраться, что происходит в цикле for(реализация алгоритма Луна для банковских карточек). Спасибо  :)

num=$1

   len=${#num}

    is_odd=1
    sum=0
     
    for((t = len - 1; t >= 0; --t)) {
        digit=${num:$t:1} #????

        if [[ $is_odd -eq 1 ]]; then
            sum=$(( sum + $digit ))
        else
            sum=$(( $sum + ( $digit != 9 ? ( ( 2 * $digit ) % 9 ) : 9 ) ))
        fi

        is_odd=$(( ! $is_odd ))
    }

    # NOTE: returning exit status of 0 on success
    return $(( 0 != ( $suma % 10 ) ))

shura1

  • Гость
Re: Не могу разобраться с циклом BASH
« Ответ #1 : 05 Января 2016, 06:42:00 »
А в чем помочь?

Если по инструкции, где в комментарии знак вопроса, там башевская конструкция выборки подстроки с индексом t и длиной 1 - то есть одной цифры.

Если почему не работает, то во-первых в последней строчке опечатка - не $suma, а $sum, a во-вторых - это тело функции без заголовка и закрывающей скобки. Может работать как скрипт, если return заменить на exit.

Ну а если полностью разжевать весь код, то уж извините. Код простой и понятный. Если немного поучитьcя.

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Не могу разобраться с циклом BASH
« Ответ #2 : 05 Января 2016, 13:37:55 »
Если почему не работает
Кроме того, что это дичайшая смесь bash и других языков(даже не буду предполагать каких)? Взять хотя бы формат for …; do …; done
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

 

Страница сгенерирована за 0.036 секунд. Запросов: 26.