Sponsored Content
Top Forums Shell Programming and Scripting Script to run on 2 4 and 7 day of the month Post 302975205 by drl on Thursday 9th of June 2016 11:02:08 AM
Old 06-09-2016
Hi.

It seems that we need to create a list of the working days in a month, then select days 2,4,7 from that list and check if today is in that list. Here is a demonstration of those steps, using utilities that are found in GNU/Debian as noted:
Code:
#!/usr/bin/env bash

# @(#) s3       Demonstrate display of days in month: "working", not weekend.

D=dateutils.dseq
# Utility functions: print-as-echo, print-line-with-visual-space, debug.
# export PATH="/usr/local/bin:/usr/bin:/bin"
LC_ALL=C ; LANG=C ; export LC_ALL LANG
pe() { for _i;do printf "%s" "$_i";done; printf "\n"; }
pl() { pe;pe "-----" ;pe "$*"; }
db() { ( printf " db, ";for _i;do printf "%s" "$_i";done;printf "\n" ) >&2 ; }
db() { : ; }
C=$HOME/bin/context && [ -f $C ] && $C $D date grep

pl " First day of current month:"
date --date=today +%Y-%m-01

pl " Day 30 days in the future:"
date --date="now + 30 days" +%F

# Get list of working days from first of month.
$D -s "ss" $( date --date=today +%Y-%m-01 ) "$( date --date="now + 30 days" +%F )" -f "%F %a" > f1

pl " Sample of output:"
head -8 f1

pl " Select days 2,4,7:"
sed -n -e '2p' -e '4p' -e '7p' f1 |
tee f2

pl " Test if today is in the 3-day list:"
today=$( date +%F )
pe " today is $today"

if grep "$today" f2 >/dev/null
then
  pe " YES, touch the file now."
else
  pe " Today is NOT day 2,4,7, skipping touch."
fi

exit 0

producing (luckily today seems like the 7th working day):
Code:
$ ./s3

Environment: LC_ALL = C, LANG = C
(Versions displayed with local utility "version")
OS, ker|rel, machine: Linux, 3.16.0-4-amd64, x86_64
Distribution        : Debian 8.4 (jessie) 
bash GNU bash 4.3.30
dateutils.dseq dseq 0.3.1
date (GNU coreutils) 8.23
grep (GNU grep) 2.20

-----
 First day of current month:
2016-06-01

-----
 Day 30 days in the future:
2016-07-09

-----
 Sample of output:
2016-06-01 Wed
2016-06-02 Thu
2016-06-03 Fri
2016-06-06 Mon
2016-06-07 Tue
2016-06-08 Wed
2016-06-09 Thu
2016-06-10 Fri

-----
 Select days 2,4,7:
2016-06-02 Thu
2016-06-06 Mon
2016-06-09 Thu

-----
 Test if today is in the 3-day list:
 today is 2016-06-09
 YES, touch the file now.

Not trivial, but an interesting problem, however, end cases are not tested, so some work may be needed to turn these ideas into a production script.

See man pages for details.

Best wishes ... cheers, drl
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Write a shell script to find whether the first day of the month is a working day

Hi , I am relatively new to unix... Can u pls help me out to find out if the first day of the month is a working day ie from (Monday to Friday)...using Date and If clause in Korn shell.. This is very urgent. Thanks for ur help... (7 Replies)
Discussion started by: phani
7 Replies

2. Shell Programming and Scripting

Cron to run first day of month to calculate date 3 months ago

Hi, I would like to find out how can i calculate a date which is 3 months ago. I intend to run a cron job on the 1st of every month, and calculate the month 4 months earlier from the date. For example, if today's date is 1st May 2007, i would like to return 012007( January 2007). i can get... (1 Reply)
Discussion started by: new2ss
1 Replies

3. UNIX for Dummies Questions & Answers

cron script -run every 2nd day of month except Monday

I know I can't schedule this in cron and would have to write a wrapper around my script and schedule it in cron ....but not sure how do to this? How do I exclude Monday if the 2nd day of the month falls on a Monday? Thanks. I tried this: 0 0 2 * 0,2-6 command And I know this doesnt... (2 Replies)
Discussion started by: newtou
2 Replies

4. Shell Programming and Scripting

crontab entry to run every last day of the month

i've created a script which should run every last day of the month. what would be the exact crontab entry for this? thanks! (9 Replies)
Discussion started by: tads98
9 Replies

5. Shell Programming and Scripting

Script to find previous month last day minus one day timestamp

Hi All, I need to find the previous month last day minus one day, using shell script. Can you guys help me to do this. My Requirment is as below: Input for me will be 2000909(YYYYMM) I need the previous months last day minus 1 day timestamp. That is i need 2000908 months last day minus ... (3 Replies)
Discussion started by: girish.raos
3 Replies

6. Shell Programming and Scripting

Script to counting a specific word in a logfile on each day of this month, last month etc

Hello All, I am trying to come up with a shell script to count a specific word in a logfile on each day of this month, last month and the month before. I need to produce this report and email it to customer. Any ideas would be appreciated! (5 Replies)
Discussion started by: pnara2
5 Replies

7. Shell Programming and Scripting

run the script for last day of the month

Hello Experts, I have a script which i want to run the on last day of every month. let say I have backup.sh script which i want to run it every month last day. Can anyone please help :confused: thanks (4 Replies)
Discussion started by: aks_1902
4 Replies

8. Shell Programming and Scripting

Need help in running script on last day of month

Hello Experts/Guru, I need a help in running the script on every month last day.... PS: due to some constrain I can't schedule in crontab Requirement: On Jan 31st i want to run some script, similarly on Feb 28th, March 31st, April 30th......till Dec 31st. Please help me by providing... (3 Replies)
Discussion started by: aks_1902
3 Replies

9. UNIX for Dummies Questions & Answers

Running Script via Crontab on 2nd Working day each month

Hello Guys, I have a questions regarding running a shell script every second working day each month. I have no clue how solve this problem :wall:. Important is that it has to be the second working (Mo-Fr). Example: If 1st and 2nd Days of month are Sat and Sun the script must run on 4th day... (5 Replies)
Discussion started by: Hollo
5 Replies

10. Shell Programming and Scripting

Writing a script to run weekly/monthly - check for weekday or day-of-the-month

Hi all, I currently have a UNIX file maintenance script that runs daily as a cron job. Now I want to change the script and create functions/sub inside it that runs on a weekly or monthly basis. To run all the scripts' daily maintenance, I want to schedule it in cron as simply maint.sh... (1 Reply)
Discussion started by: newbie_01
1 Replies
CALENDAR(1)						    BSD General Commands Manual 					       CALENDAR(1)

NAME
calendar -- reminder service SYNOPSIS
calendar [-a] [-A num] [-B num] [-F friday] [-f calendarfile] [-t dd[.mm[.year]]] [-W num] DESCRIPTION
The calendar utility checks the current directory for a file named calendar and displays lines that begin with either today's date or tomor- row's. On the day before a weekend (normally Friday), events for the next three days are displayed. The following options are available: -A num Print lines from today and the next num days (forward, future). -a Process the ``calendar'' files of all users and mail the results to them. This requires super-user privileges. -B num Print lines from today and the previous num days (backward, past). -F friday Specify which day of the week is ``Friday'' (the day before the weekend begins). Default is 5. -f calendarfile Use calendarfile as the default calendar file. -t dd[.mm[.year]] For test purposes only: set date directly to argument values. -W num Print lines from today and the next num days (forward, future). Ignore weekends when calculating the number of days. To handle calendars in your national code table you can specify ``LANG=<locale_name>'' in the calendar file as early as possible. To handle national Easter names in the calendars ``Easter=<national_name>'' (for Catholic Easter) or ``Paskha=<national_name>'' (for Orthodox Easter) can be used. Other lines should begin with a month and day. They may be entered in almost any format, either numeric or as character strings. If the proper locale is set, national month and weekday names can be used. A single asterisk (``*'') matches every month. A day without a month matches that day of every week. A month without a day matches the first of that month. Two numbers default to the month followed by the day. Lines with leading tabs default to the last entered date, allowing multiple line specifications for a single date. ``Easter'', is Easter for this year, and may be followed by a positive or negative integer. ``Paskha'', is Orthodox Easter for this year, and may be followed by a positive or negative integer. Weekdays may be followed by ``-4'' ... ``+5'' (aliases for last, first, second, third, fourth) for moving events like ``the last Monday in April''. By convention, dates followed by an asterisk are not fixed, i.e., change from year to year. Day descriptions start after the first <tab> character in the line; if the line does not contain a <tab> character, it is not displayed. If the first character in the line is a <tab> character, it is treated as a continuation of the previous line. The ``calendar'' file is preprocessed by cpp(1), allowing the inclusion of shared files such as lists of company holidays or meetings. If the shared file is not referenced by a full pathname, cpp(1) searches in the current (or home) directory first, and then in the directory /usr/share/calendar. Empty lines and lines protected by the C commenting syntax (/* ... */) are ignored. Some possible calendar entries (<tab> characters highlighted by sequence) LANG=C Easter=Ostern #include <calendar.usholiday> #include <calendar.birthday> 6/15 June 15 (if ambiguous, will default to month/day). Jun. 15 June 15. 15 June June 15. Thursday Every Thursday. June Every June 1st. 15 * 15th of every month. May Sun+2 second Sunday in May (Muttertag) 04/SunLast last Sunday in April, summer time in Europe Easter Easter Ostern-2 Good Friday (2 days before Easter) Paskha Orthodox Easter FILES
calendar file in current directory ~/.calendar calendar HOME directory. A chdir is done into this directory if it exists. ~/.calendar/calendar calendar file to use if no calendar file exists in the current directory. ~/.calendar/nomail do not send mail if this file exists. The following default calendar files are provided: calendar.all File which includes all the default files. calendar.australia Calendar of events in Australia. calendar.birthday Births and deaths of famous (and not-so-famous) people. calendar.christian Christian holidays. This calendar should be updated yearly by the local system administrator so that roving holidays are set correctly for the current year. calendar.computer Days of special significance to computer people. calendar.croatian Calendar of events in Croatia. calendar.freebsd Birthdays of FreeBSD committers. calendar.french Calendar of events in France. calendar.german Calendar of events in Germany. calendar.history Everything else, mostly U.S. historical events. calendar.holiday Other holidays, including the not-well-known, obscure, and really obscure. calendar.judaic Jewish holidays. This calendar should be updated yearly by the local system administrator so that roving holidays are set correctly for the current year. calendar.music Musical events, births, and deaths. Strongly oriented toward rock 'n' roll. calendar.newzealand Calendar of events in New Zealand. calendar.russian Russian calendar. calendar.southafrica Calendar of events in South Africa. calendar.usholiday U.S. holidays. This calendar should be updated yearly by the local system administrator so that roving holidays are set correctly for the current year. calendar.world Includes all calendar files except for national files. COMPATIBILITY
The calendar program previously selected lines which had the correct date anywhere in the line. This is no longer true, the date is only recognized when it occurs at the beginning of a line. SEE ALSO
at(1), cpp(1), mail(1), cron(8) HISTORY
A calendar command appeared in Version 7 AT&T UNIX. BUGS
The calendar utility does not handle Jewish holidays and moon phases. BSD
June 13, 2002 BSD
All times are GMT -4. The time now is 06:41 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy