ожидаем, что сценарий выдает ошибку

Нам просто нужно вычесть текущий день (сегодня день $ td ) из ожидаемого выбранного PayDay.

Если PayDay больше нынешнего, результат будет положительным и правильным.

Например, td = 8 и pd = 15:

$ td=8; pd=15
$ echo "The next PayDay will be in $((pd-td)) days"
7

Если результат отрицательный, мы просто добавляем количество дней текущего месяца.

Это может быть сценарий:

#!/bin/bash

pd=${1:-10}               # Pay day selected
td=$( date -u +'%-d' )    # Today day of the month.

# To calculate the number of days in the present month.
MonthDays=$(  date +'%-d' -ud "$(date +"%Y-%m-01T00:00:00UTC") next month last day"  )
# Maybe a simpler alternative for current month last day:
# echo $(cal) | awk '{print $NF}'     # $(cal) is unquoted on purpose.

# Make the next PayDay fit within the available days in the month.
# If the selected PayDay given to the script is 31 and the month
# only has 30 days, the next PayDay should be 30,
# not an un-existent and impossible 31.
pd=$(( (pd>MonthDays)?MonthDays:pd ))

res=$(( pd-td ))
# If the value of res is negative, just add the number of days in present month.
echo "Pay Day is in $(( res+=(res<0)?MonthDays:0 )) days"    

Обратите внимание, что уникальная команда date должна использовать только текущий месяц, поэтому границы месяца / года не пересекались. Это позволяет избежать почти всех проблем. Единственное предположение состоит в том, что текущий месяц начинается с числа 01 . Кроме того, расчет выполняется в UTC + 0, что позволяет избежать возможных проблем с DST (летнее время) или локальными изменениями.

Если выбранный PayDay (скажем, 31) больше, чем возможное количество дней в месяце (скажем, февраль с 28), программа предполагает, что такое 28 является PayDay, а не несуществующим (для февраля) 31.

Вызов сценария (если сегодня день 9):

$ ./script 7
Pay Day is in 29 days

$ ./script 16
Pay Day is in 7 days

$ ./script 31
Pay Day is in 19 days

Но если сегодня день 28 февраля:

$ ./script 8
Pay Day is in 8 days

$ ./script 28
Pay Day is in 0 days

$ ./script 31
Pay Day is in 0 days
1
27.04.2017, 07:02
1 ответ

Двойные кавычки в вашем случае являются проблемой в скрипте expect.

spawn sh -c "ssh IPaddress "./bin/show_info.py |.. sed 's/total.*//g'" > Report_2017.txt"

Просто обратите внимание, что из-за двойных кавычек, оканчивающихся после IP-адреса, канал остается открытым.

Вы можете попробовать это:

spawn sh -c "ssh IPaddress \"./bin/show_info.py |.. sed 's/total.*//g'\" > Report_2017.txt"
1
27.01.2020, 23:45

Теги

Похожие вопросы