Как продолжить bash l oop? - PullRequest
       1

Как продолжить bash l oop?

1 голос
/ 10 февраля 2020

У меня сейчас проблема, которую я не могу решить. Написание bash скрипта на Ма c ОС Каталина. L oop проходит через утверждение правды, но, столкнувшись с ложным утверждением, оно застряло на нем.

Задание % Сделайте что-нибудь% , если текущий день в oop - рабочий день.

Код

# Set initial dates
starting_date=2020-02-10
ending_date=2020-02-24
current_date=$starting_date

#What is the day of the week of this day
current_date_wd=$(date -j -f "%Y-%m-%d" "$current_date" +%u )

#Loop in the set date range
while [ "$current_date" != "$ending_date" ]; 
do
  if [ "$current_date_wd" != "6" ] && [ "$current_date_wd" != "7" ]
  then

# Echo the current workday
    echo 'Today is '$current_date' and it-s a '$current_date_wd'-s day'

# Increment by 1d
    current_date=`date -j -v +1d -f "%Y-%m-%d" "$current_date" +%Y-%m-%d`

# Calculate day of week
    current_date_wd=$( date -j -f "%Y-%m-%d" "$current_date" +%u )
  else

# Increment
    current_date=`date -j -v +1d -f "%Y-%m-%d" "$current_date" +%Y-%m-%d`

# Skip
    echo 'skip'
    continue
  fi
done

Первая часть вывода верна. L oop проходит через дни и показывает сообщение. Но после выполнения ложного условия l oop не go возвращается для проверки заявления. Вывод

Today is 2020-02-10 and it-s a 1-s day
Today is 2020-02-11 and it-s a 2-s day
Today is 2020-02-12 and it-s a 3-s day
Today is 2020-02-13 and it-s a 4-s day
Today is 2020-02-14 and it-s a 5-s day
skip
skip
skip
skip
skip
skip
skip
skip
skip

Ожидается

Today is 2020-02-10 and it-s a 1-s day
Today is 2020-02-11 and it-s a 2-s day
Today is 2020-02-12 and it-s a 3-s day
Today is 2020-02-13 and it-s a 4-s day
Today is 2020-02-14 and it-s a 5-s day
skip
skip
Today is 2020-02-17 and it-s a 1-s day
Today is 2020-02-18 and it-s a 2-s day
Today is 2020-02-19 and it-s a 3-s day
Today is 2020-02-20 and it-s a 4-s day
Today is 2020-02-21 and it-s a 5-s day
skip
skip

Почему «продолжить» не работает?

1 Ответ

2 голосов
/ 10 февраля 2020

Вы забыли обновить current_date_wd в другой части, вот рабочее решение.

starting_date=2020-02-10
ending_date=2020-02-24
current_date=$starting_date

#What is the day of the week of this day
current_date_wd=$(date -j -f "%Y-%m-%d" "$current_date" +%u )

#Loop in the set date range
while [ "$current_date" != "$ending_date" ]; 
do
  if [ "$current_date_wd" != "6" ] && [ "$current_date_wd" != "7" ]
  then

    # Echo the current workday
    echo 'Today is '$current_date' and it-s a '$current_date_wd'-s day'

    # Increment by 1d
    current_date=`date -j -v +1d -f "%Y-%m-%d" "$current_date" +%Y-%m-%d`

    # Calculate day of week
    current_date_wd=$( date -j -f "%Y-%m-%d" "$current_date" +%u )
  else

    # Increment
    current_date=`date -j -v +1d -f "%Y-%m-%d" "$current_date" +%Y-%m-%d`
    current_date_wd=$( date -j -f "%Y-%m-%d" "$current_date" +%u )

    # Skip
    echo 'skip'
    continue
  fi
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...