I realize I could whip up a little C or Ruby program to do this, but I want my script to have as few dependencies as possible.
Given that caveat, how does one d
$ date -v -1d
-d sets Daylight Savings time flag.
Try man date for more info.
The command Matthew mentions works for me with /bin/date on Leopard. Besides, as Schwern points out, if you're sure your shell script is going to be run on Mac OS X, why don't you want to use Python or Ruby, that both come in standard in /usr/bin? This would in no way affect portability in your particular scenario.
Because MacOS is based on BSD, not linux, the command is actually:
date -v-1d
The adjust switch takes the format -v[+/-](number)[ymwdHMS]
.
For example, this OS X date command will add 14 days to the input string 20160826 (not the present time):
date -j -f %Y%m%d -v+14d 20160826 +%Y%m%d
Here is a script that I use to print the dates for my journal in google doc's:
#!/bin/bash
# ask user for variable details
read -p 'Starting date in "mm-dd-yyyy" format: ' DATE
# adjust the count by editing the "x" number in {0..x}
# 91 days will give you about 3 months, currently set to 6 for testing
# %a gives short day of the week, -m -d gives single digit months and days, capital Y gives 4 digit year
for i in {0..6}
do
NEXT_DATE=$(date -j -f %m-%d-%Y -v+"$i"d $DATE +'%a %-m/%-d/%y')
echo -e "$NEXT_DATE\n\n\n"
done
Here is the sample output, (I use 3 new lines between each date):
Sun 4/1/18
Mon 4/2/18
Tue 4/3/18
Wed 4/4/18
Thu 4/5/18
Fri 4/6/18
Sat 4/7/18
I realize I could whip up a little C or Ruby program to do this, but I want my script to have as few dependencies as possible.
Doing in C or as a Ruby script would result in less dependancies, and be more cross-platform.. Bash-scripting just calls various other scripts/applications, mainly the GNU utilities.. Many of the commands are unavailable, or take different arguments on other platforms (especially between OS X and Linux)..
Ruby is included by default on OS X Leopard (and 10.4, and probably previous versions if I recall correctly), and if you use Rubys built-in date libraries, it will work consistently on any platform.
Whenever you try to do anything remotely complicated, you are generally best of using a "proper" scripting language!