There's no such thing as a stupid question, but they're the easiest to answer.
JoinTour
Login
 
Tag Cloud
access audio avg avg 8 bios blue screen boot bsod computer connection cpu crash css dell desktop dma driver drivers dvd email error excel explorer firefox firefox 3 freeze gimp graphics hard drive hardware hijackthis hjt install internet internet explorer itunes keyboard laptop macro malware monitor motherboard network networking outlook outlook 2003 outlook 2007 outlook express pio problem problems router seo server slow sound sp3 spyware trojan usb video virtumonde virus vista vundo windows windows vista windows xp winxp wireless
UNIX/Linux
Search
Search in:
 
Advanced Search
Tech Support Guy Forums > Operating Systems > UNIX/Linux >
Bash week and input help


HELLO AND WELCOME! Before you can post your question, you'll have to register -- it's completely free! Click here to join today! We highly recommend that you print a copy of our Guide for New Members. Enjoy!

 
Thread Tools
bashboy's Avatar
Junior Member with 2 posts.
 
Join Date: Mar 2007
Experience: Intermediate
31-Mar-2007, 12:59 PM #1
Bash week and input help
Hi all,

I am hopeful that someone will be able to help me out here.

I am writing a small bash script to rotate a schedule on a monthly, 3 weekly, and week schedule between multiple tasks and with 3 employees. I have manually entered the schedule (52 entries) because I can't think of the math to do it otherwise. I would love a better way to do it, so if anyone has any suggestions that would be great.

I do have two questions that I hope someone could help with.
1. Is there anyway to figure out a date or range of dates if all one know is the week number (yearly week that is 1-52) I currently use the date function to find the appropriate week number but I can't seem to go in the reverse.
2. I am currently suggesting a week number based on the date %V functoin and adding one to it to suggest next weeks week number (week=week+1). The problem I am having is, I can suggest the week and read the variable (pickweek) but I can't let the user just hit enter and capture the suggested week number. The user has to enter it manually. Anyone know how to suggest it based on the date function and then if the user hits enter, accpted that value, or else use the user supplied week.

Any help is appreicated.

Thank you,
mortis...
lotuseclat79's Avatar
Distinguished Member with 10,007 posts.
 
Join Date: Sep 2003
Location: -71.45091, 42.27841
02-Apr-2007, 07:07 AM #2
Quote:
Originally Posted by bashboy
Hi all,

I am hopeful that someone will be able to help me out here.

I am writing a small bash script to rotate a schedule on a monthly, 3 weekly, and week schedule between multiple tasks and with 3 employees. I have manually entered the schedule (52 entries) because I can't think of the math to do it otherwise. I would love a better way to do it, so if anyone has any suggestions that would be great.

I do have two questions that I hope someone could help with.
1. Is there anyway to figure out a date or range of dates if all one know is the week number (yearly week that is 1-52) I currently use the date function to find the appropriate week number but I can't seem to go in the reverse.
2. I am currently suggesting a week number based on the date %V functoin and adding one to it to suggest next weeks week number (week=week+1). The problem I am having is, I can suggest the week and read the variable (pickweek) but I can't let the user just hit enter and capture the suggested week number. The user has to enter it manually. Anyone know how to suggest it based on the date function and then if the user hits enter, accpted that value, or else use the user supplied week.

Any help is appreicated.

Thank you,
mortis...
Hi bashboy,

Welcome to TSG!

How many multiple tasks for the three employees are you trying to schedule? Is each employee capable of doing all of the tasks? Is your schedule shift related?

What tasks are related to monthly, 3-weekly, or weekly - all tasks, some tasks, or just one task for each category?

Zeller's algorithm computes the day of the week for any calendar date, but that doesn't appear to apply to what you want to do.

Does your current schedule look like? Assumes 1 task/category:

weekofyear weekly task 3-weekly task monthly task
1 employeeA employeeB employeeC
2 employeeC employeeA employeeB
,,,

What is the current layout of your schedule as you have it. Just looking for a pattern, so reply using abstraction of real data, i.e. no names, etc.

How do you want to rotate the schedule between employees and multiple tasks per category: monthly, 3-weekly, weekly?

-- Tom
__________________
The independence created by philosophical insight is - in my opinion - the mark of distinction between a mere artisan or specialist and a real seeker after truth. - Einstein wrote in 1944.

Some say knowledge is power, I say knowledge without action is powerless. - lotuseclat79

Don't confuse action with movement. - Hemingway to Gardner

Imagination is more important than knowledge. - Einstein
bashboy's Avatar
Junior Member with 2 posts.
 
Join Date: Mar 2007
Experience: Intermediate
06-Apr-2007, 01:36 PM #3
Sorry lotuseclat79,

Had a busy week.

This is what I have so far (it has been sanitized).

Thank you,
Bashboy

--------------------------------------------------------------------------

#!/bin/bash

clear

echo
echo
echo "Today's date is `date +%m-%d-%Y`, this is week `date +"%V"`."
export today=`date +%m-%d-%Y`
export week=`date +%V`
let week=week+1
echo
echo -n "Please enter the week number that you would like to use [$week]: ";
read pickweek
echo
echo

person1="person1"
person2="person2"
person3="person3"
hot="Hot"
pc="pc"
rep=" Rep"

block4="Hot
pc
Rep"

block5="Coordinator
Holiday"

if [ $pickweek = 1 ]; then
bperson1k1="$person2"
bperson1k2="$person2"
bperson1k3="$person1"
bperson1k5="$block4"
bperson1k7="$block5"
else
if [ $pickweek = 2 ]; then
bperson1k1="$person2"
bperson1k2="$person1"
bperson1k3="$person2"
bperson1k5="$block4"
bperson1k7="$block5"
else
if [ $pickweek = 3 ]; then
bperson1k1="$person1"
bperson1k2="$person2"
bperson1k3="$person2"
bperson1k6="$block4"
bperson1k7="$block5"
else
if [ $pickweek = 4 ]; then
bperson1k1="$person2"
bperson1k2="$person2"
bperson1k3="$person1"
bperson1k6="$block4"
bperson1k7="$block5"
else
if [ $pickweek = 5 ]; then
bperson1k1="$person2"
bperson1k2="$person1"
bperson1k3="$person2"
bperson1k4="$block4"
bperson1k7="$block5"
else
if [ $pickweek = 6 ]; then
bperson1k1="$person1"
bperson1k2="$person2"
bperson1k3="$person2"
bperson1k4="$block4"
bperson1k8="$block5"
else
if [ $pickweek = 7 ]; then
bperson1k1="$person2"
bperson1k2="$person2"
bperson1k3="$person1"
bperson1k5="$block4"
bperson1k1="$block5"
else
if [ $pickweek = 8 ]; then
bperson1k1="$person2"
bperson1k2="$person1"
bperson1k3="$person2"
bperson1k5="$block4"
bperson1k7="$block5"
else
if [ $pickweek = 9 ]; then
bperson1k1="$person1"
bperson1k2="$person2"
bperson1k3="$person2"
bperson1k6="$block4"
bperson1k8="$block5"
else
if [ $pickweek = 10 ]; then
bperson1k1="$person2"
bperson1k2="$person2"
bperson1k3="$person1"
bperson1k6="$block4"
bperson1k8="$block5"
else
if [ $pickweek = 11 ]; then
bperson1k1="$person2"
bperson1k2="$person1"
bperson1k3="$person2"
bperson1k4="$block4"
bperson1k7="$block5"

else
if [ $pickweek = 12 ]; then
bperson1k1="$person1"
bperson1k2="$person2"
bperson1k3="$person2"
bperson1k4="$block4"
bperson1k7="$block5"
else
if [ $pickweek = 13 ]; then
bperson1k1="$person2"
bperson1k2="$person2"
bperson1k3="$person1"
bperson1k5="$block4"
bperson1k8="$block5"
else
if [ $pickweek = 14 ]; then
bperson1k1="$person2"
bperson1k2="$person1"
bperson1k3="$person2"
bperson1k5="$block4"
bperson1k8="$block5"
else
if [ $pickweek = 15 ]; then
bperson1k1="$person1"
bperson1k2="$person2"
bperson1k3="$person2"
bperson1k6="$block4"
bperson1k7="$block5"
else
if [ $pickweek = 16 ]; then
bperson1k1="$person2"
bperson1k2="$person2"
bperson1k3="$person1"
bperson1k6="$block4"
bperson1k7="$block5"
else
if [ $pickweek = 17 ]; then
bperson1k1="$person2"
bperson1k2="$person1"
bperson1k3="$person2"
bperson1k4="$block4"
bperson1k8="$block5"
else
if [ $pickweek = 18 ]; then
bperson1k1="$person1"
bperson1k2="$person2"
bperson1k3="$person2"
bperson1k4="$block4"
bperson1k8="$block5"
else
if [ $pickweek = 19 ]; then
bperson1k1="$person2"
bperson1k2="$person2"
bperson1k3="$person1"
bperson1k5="$block4"
bperson1k7="$block5"
else
if [ $pickweek = 20 ]; then
bperson1k1="$person2"
bperson1k2="$person1"
bperson1k3="$person2"
bperson1k5="$block4"
bperson1k7="$block5"
else
if [ $pickweek = 21 ]; then
bperson1k1="$person1"
bperson1k2="$person2"
bperson1k3="$person2"
bperson1k6="$block4"
bperson1k8="$block5"
else
if [ $pickweek = 22 ]; then
bperson1k1="$person2"
bperson1k2="$person2"
bperson1k3="$person1"
bperson1k6="$block4"
bperson1k8="$block5"
else
if [ $pickweek = 23 ]; then
bperson1k1="$person2"
bperson1k2="$person1"
bperson1k3="$person2"
bperson1k4="$block4"
bperson1k7="$block5"
else
if [ $pickweek = 24 ]; then
bperson1k1="$person1"
bperson1k2="$person2"
bperson1k3="$person2"
bperson1k4="$block4"
bperson1k7="$block5"
else
if [ $pickweek = 25 ]; then
bperson1k1="$person2"
bperson1k2="$person2"
bperson1k3="$person1"
bperson1k5="$block4"
bperson1k8="$block5"
else
if [ $pickweek = 26 ]; then
bperson1k1="$person2"
bperson1k2="$person1"
bperson1k3="$person2"
bperson1k5="$block4"
bperson1k8="$block5"
else
if [ $pickweek = 27 ]; then
bperson1k1="$person1"
bperson1k2="$person2"
bperson1k3="$person2"
bperson1k6="$block4"
bperson1k7="$block5"
else
if [ $pickweek = 28 ]; then
bperson1k1="$person2"
bperson1k2="$person2"
bperson1k3="$person1"
bperson1k6="$block4"
bperson1k7="$block5"
else
if [ $pickweek = 29 ]; then
bperson1k1="$person2"
bperson1k2="$person1"
bperson1k3="$person2"
bperson1k4="$block4"
bperson1k8="$block5"
else
if [ $pickweek = 30 ]; then
bperson1k1="$person1"
bperson1k2="$person2"
bperson1k3="$person2"
bperson1k4="$block4"
bperson1k8="$block5"
else
if [ $pickweek = 31 ]; then
bperson1k1="$person2"
bperson1k2="$person2"
bperson1k3="$person1"
bperson1k5="$block4"
bperson1k7="$block5"
else
if [ $pickweek = 32 ]; then
bperson1k1="$person2"
bperson1k2="$person1"
bperson1k3="$person2"
bperson1k5="$block4"
bperson1k7="$block5"
else
if [ $pickweek = 33 ]; then
bperson1k1="$person1"
bperson1k2="$person2"
bperson1k3="$person2"
bperson1k6="$block4"
bperson1k8="$block5"
else
if [ $pickweek = 34 ]; then
bperson1k1="$person2"
bperson1k2="$person2"
bperson1k3="$person1"
bperson1k6="$block4"
bperson1k8="$block5"
else
if [ $pickweek = 35 ]; then
bperson1k1="$person2"
bperson1k2="$person1"
bperson1k3="$person2"
bperson1k4="$block4"
bperson1k7="$block5"
else
if [ $pickweek = 36 ]; then
bperson1k1="$person1"
bperson1k2="$person2"
bperson1k3="$person2"
bperson1k4="$block4"
bperson1k7="$block5"
else
if [ $pickweek = 37 ]; then
bperson1k1="$person2"
bperson1k2="$person2"
bperson1k3="$person1"
bperson1k5="$block4"
bperson1k8="$block5"
else
if [ $pickweek = 38 ]; then
bperson1k1="$person2"
bperson1k2="$person1"
bperson1k3="$person2"
bperson1k5="$block4"
bperson1k8="$block5"
else
if [ $pickweek = 39 ]; then
bperson1k1="$person1"
bperson1k2="$person2"
bperson1k3="$person2"
bperson1k6="$block4"
bperson1k7="$block5"
else
if [ $pickweek = 40 ]; then
bperson1k1="$person2"
bperson1k2="$person2"
bperson1k3="$person1"
bperson1k6="$block4"
bperson1k7="$block5"
else
if [ $pickweek = 41 ]; then
bperson1k1="$person2"
bperson1k2="$person1"
bperson1k3="$person2"
bperson1k4="$block4"
bperson1k8="$block5"
else
if [ $pickweek = 42 ]; then
bperson1k1="$person1"
bperson1k2="$person2"
bperson1k3="$person2"
bperson1k4="$block4"
bperson1k8="$block5"
else
if [ $pickweek = 43 ]; then
bperson1k1="$person2"
bperson1k2="$person2"
bperson1k3="$person1"
bperson1k5="$block4"
bperson1k7="$block5"
else
if [ $pickweek = 44 ]; then
bperson1k1="$person2"
bperson1k2="$person1"
bperson1k3="$person2"
bperson1k5="$block4"
bperson1k8="$block5"
else
if [ $pickweek = 45 ]; then
bperson1k1="$person1"
bperson1k2="$person2"
bperson1k3="$person2"
bperson1k6="$block4"
bperson1k8="$block5"
else
if [ $pickweek = 46 ]; then
bperson1k1="$person2"
bperson1k2="$person2"
bperson1k3="$person1"
bperson1k6="$block4"
bperson1k8="$block5"
else
if [ $pickweek = 47 ]; then
bperson1k1="$person2"
bperson1k2="$person1"
bperson1k3="$person2"
bperson1k4="$block4"
bperson1k7="$block5"
else
if [ $pickweek = 48 ]; then
bperson1k1="$person1"
bperson1k2="$person2"
bperson1k3="$person2"
bperson1k4="$block4"
bperson1k8="$block5"
else
if [ $pickweek = 49 ]; then
bperson1k1="$person2"
bperson1k2="$person2"
bperson1k3="$person1"
bperson1k5="$block4"
bperson1k8="$block5"
else
if [ $pickweek = 50 ]; then
bperson1k1="$person2"
bperson1k2="$person1"
bperson1k3="$person2"
bperson1k5="$block4"
bperson1k8="$block5"
else
if [ $pickweek = 51 ]; then
bperson1k1="$person1"
bperson1k2="$person2"
bperson1k3="$person2"
bperson1k6="$block4"
bperson1k7="$block5"
else
if [ $pickweek = 52 ]; then
bperson1k1="$person2"
bperson1k2="$person2"
bperson1k3="$person1"
bperson1k6="$block4"
bperson1k8="$block5"
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi

output="This is the rotating schedule week $pickweek (`date -d "+3 day" +%x` - `date -d "+7 day" +%x`)


$bperson1k1
------------------------
Reports
Read Lists
Digest
Statistics
Coordination
$bperson1k4
$bperson1k7


$bperson1k2
------------------------
Triage
Monitor
Schedule
Email
Maintenperson1ce
Tips
Coordination
$bperson1k5
$bperson1k8


$bperson1k3
------------------------
Activity
Report
Call
Superson2aries
Website
Coordination
$bperson1k6
$bperson1k9"

echo "$output"
echo

echo -n "Would you like to publish this schedule? [Y,n]";
read -e pub
if [ "$pub" = "n" ]; then
echo "Have a nice day!"
exit
else
if [ "$pub" = "y" ]; then
echo "Sending this schedule to"
echo "email"
echo "email"
echo "email"
echo "email"
echo "email"

echo "$output" | mail email -s "Rotating Schedule - calendar week $pickweek (`date -d "+3 day" +%x` - `date -d "+7 day" +%x`)"
fi
fi
---------------------------------------------------------------------------------------

So, some of the schedules change /week, some /month.

Thanks again...
lotuseclat79's Avatar
Distinguished Member with 10,007 posts.
 
Join Date: Sep 2003
Location: -71.45091, 42.27841
06-Apr-2007, 07:42 PM #4
Hi bashboy,

There is a pattern in your assignments as follows:

if week mod 3 == 0 then assign pattern 3
else if week mod 3 == 2 then assign pattern 2
else if week mod 3 == 1 then assign pattern 1

where mod is the remainder of week/n (n=3)
Note: I think the mod operator in script is the % operator.

and pattern 1 is given by the string 22145
and pattern 2 is given by the string 21245
and pattern 3 is given by the string 12245

Your schedule has 7 different pairs of the numbers
(5,7) (6,7) (4,7) (4,8) (5,1) ((6,8) (5,8)
for assigning variations in the tasks for bpersonlkn where n is not = 1 or 2 or 3

The anomaly is (5,1) which only appears once in your schedule. I assume that is for some reason occuring in week 7.

I did not find any repeating pattern for these, but aside from the anomaly, the other 6 pairs were evenly divided between 3 pairs with 8 weeks, and 3 pairs with 9 weeks + the anomaly = 52 weeks.

In order to simplfy the schedule, you would need to think of a way to repeat a pattern for the last two tasks in each weeks schedule - which are always assigned $block4 and $block5 or the 45 of each pattern string I talked about above.

This has been a first cut analysis at simplifying the schedule.

I'll go back and look at your original question sometime this weekend to see if there is a way to do it.

I see the opportunity to greatly simplify your scheduling by revising the script to compute the output instead of enumerating each weeks tasks - if you can come up with a reasonable proposal to make a repeating pattern for last two tasks as I mentioned above. I don't know whether that is possible or even recommended - you decide.

-- Tom
__________________
The independence created by philosophical insight is - in my opinion - the mark of distinction between a mere artisan or specialist and a real seeker after truth. - Einstein wrote in 1944.

Some say knowledge is power, I say knowledge without action is powerless. - lotuseclat79

Don't confuse action with movement. - Hemingway to Gardner

Imagination is more important than knowledge. - Einstein

Last edited by lotuseclat79 : 07-Apr-2007 07:47 AM.
lotuseclat79's Avatar
Distinguished Member with 10,007 posts.
 
Join Date: Sep 2003
Location: -71.45091, 42.27841
07-Apr-2007, 07:46 AM #5
Quote:
Originally Posted by bashboy
Hi all,

I am hopeful that someone will be able to help me out here.

I am writing a small bash script to rotate a schedule on a monthly, 3 weekly, and week schedule between multiple tasks and with 3 employees. I have manually entered the schedule (52 entries) because I can't think of the math to do it otherwise. I would love a better way to do it, so if anyone has any suggestions that would be great.

I do have two questions that I hope someone could help with.
1. Is there anyway to figure out a date or range of dates if all one know is the week number (yearly week that is 1-52) I currently use the date function to find the appropriate week number but I can't seem to go in the reverse.
2. I am currently suggesting a week number based on the date %V functoin and adding one to it to suggest next weeks week number (week=week+1). The problem I am having is, I can suggest the week and read the variable (pickweek) but I can't let the user just hit enter and capture the suggested week number. The user has to enter it manually. Anyone know how to suggest it based on the date function and then if the user hits enter, accpted that value, or else use the user supplied week.

Any help is appreicated.

Thank you,
mortis...
Hi bashboy,

WRT question #1:
1. Is there anyway to figure out a date or range of dates if all one know is the week number (yearly week that is 1-52) I currently use the date function to find the appropriate week number but I can't seem to go in the reverse.

If you think about it, there are only 14 possible calendars in today's calendar system, i.e. 7 calendars where Jan 1st starts on a different day of the week, and 7 calendars that include a leap day (Feb 29th) for each calendar starting on a different day. Given that one would know which calendar of the 14 applies to a current year, then it might be possible to compute range of dates for the week.

WRT to the 2nd question, if you test the value of the input 'pickweek" for 0 or null let that answer imply "this week" as you have computed it with the %V function of the date command. Otherwise, it must be an input value and you can use that.


-- Tom
__________________
The independence created by philosophical insight is - in my opinion - the mark of distinction between a mere artisan or specialist and a real seeker after truth. - Einstein wrote in 1944.

Some say knowledge is power, I say knowledge without action is powerless. - lotuseclat79

Don't confuse action with movement. - Hemingway to Gardner

Imagination is more important than knowledge. - Einstein

Last edited by lotuseclat79 : 07-Apr-2007 11:24 AM.
Reply


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are Off
Refbacks are Off

You Are Using:
Server ID
Advertisements do not imply our endorsement of that product or service.
All times are GMT -4. The time now is 12:47 AM.
Copyright © 1996 - 2008 TechGuy, Inc. All rights reserved.
Powered by vBulletin, Copyright © 2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.1.0
Powered by Cermak Technologies, Inc.