Work the Shell - More Fun with Days and Dates
The next set of tests is one I rewrote a couple times to ensure that I wasn't tripping myself up, because my first thought simply was to use a test like this:
if [ $month -le $thismonth -a $day -le $thisday ]
But, then I realized that in edge cases it wouldn't actually work properly. For example, let's say it's April 4 and you're checking for March 11. The month test succeeds, but the day test fails—not what we want. Instead, let's use a cascading set of conditional tests:
if [ $monthnum -gt $thismonth ] ; then # month is in the future, can't be this year mostrecent=$(( $thisyear - 1 )) elif [ $monthnum -eq $thismonth -a $day -gt $thisday ] ; then # right month, but seeking a date in the future mostrecent=$(( $thisyear - 1 )) else mostrecent=$thisyear fi
With just this much code, we can at least test the normalization of data input and comparison tool. I ran this set of tests on March 1, by the way:
$ whatyear.sh Monday Aug 3 Decided that for 8/3 we're looking at year 2010 $ sh whatyear.sh mon jan 9 Decided that for 1/9 we're looking at year 2011 $ whatyear.sh mon mar 1 Decided that for 3/1 we're looking at year 2011 $ whatyear.sh mon mar 2 Decided that for 3/2 we're looking at year 2010
It correctly identified that the current date could be a match, but that the subsequent day (mar 2) had to be in the previous year for it to be a possibility.
Good. Next month, we'll put the rest of the LEGO pieces in the model and have a working script. The big task left? Parsing the output of cal to figure out the day of the week for a given date.
Dave Taylor has been hacking shell scripts for a really long time, 30 years. He's the author of the popular Wicked Cool Shell Scripts and can be found on Twitter as @DaveTaylor and more generally at www.DaveTaylorOnline.com.
Dave Taylor has been hacking shell scripts for over thirty years. Really. He's the author of the popular "Wicked Cool Shell Scripts" and can be found on Twitter as @DaveTaylor and more generally at www.DaveTaylorOnline.com.
|Privacy Is Personal||Jul 02, 2015|
|July 2015 Issue of Linux Journal: Mobile||Jul 01, 2015|
|July 2015 Video Preview||Jul 01, 2015|
|PHP for Non-Developers||Jun 30, 2015|
|A Code Boot Camp for Underprivileged Kids||Jun 30, 2015|
|Comprehensive Identity Management and Audit for Red Hat Enterprise Linux||Jun 29, 2015|
- Privacy Is Personal
- PHP for Non-Developers
- Secure Server Deployments in Hostile Territory
- Linux Kernel 4.1 Released
- Django Templates
- July 2015 Issue of Linux Journal: Mobile
- Comprehensive Identity Management and Audit for Red Hat Enterprise Linux
- Attack of the Drones
- A Code Boot Camp for Underprivileged Kids