1

I want to write a bash script that reads a keyboard input (date dd:mm:yy), stores it in a variable then echoes back the Day it corresponds to, ie

Input : 03/08/2015

Output : Wednesday

I'm having some problems with formatting this, any help is much appreciated!!

10
  • 2
    Wednesday?? Also, is this a homework? Commented Sep 17, 2015 at 13:15
  • 3rd of august is Monday Commented Sep 17, 2015 at 13:18
  • 2
    You're having trouble formatting what? What do you have so far?
    – terdon
    Commented Sep 17, 2015 at 13:22
  • #!/bin/bash echo "Enter date in string form" #ex 22042005 read dat4 #date -jf "%Y%m%d%H%M%S" $dat4 "+date \"%A,%_d %B %Y %H:%M:%S\""
    – bopi
    Commented Sep 17, 2015 at 13:45
  • 3
    Please edit your question to include more details. It is easy to miss and hard to read in the comments. See here for help on formatting your posts.
    – terdon
    Commented Sep 17, 2015 at 14:01

2 Answers 2

3

date accepts input with its -d flag, and prints it. However, input formatted like yours is treated like MM/DD/YYYY. But this shouldn't be too hard.

First, let's get input to variable:

read INPUT

Now, we need to change input from DD/MM/YYYY to MM/DD/YYYY. You can do that with sed and awk(you can also do that with awk:

INPUT=`echo $INPUT | awk -F '/' '{t=$1;$1=$2;$2=t;gsub(" ", "/");print;}'`

Now that INPUT is in proper format, feed it to date and make it only print the day:

date -d $INPUT +%A

Put it all together:

#!/bin/bash
read INPUT
INPUT=`echo $INPUT | awk -F '/' '{t=$1;$1=$2;$2=t;gsub(" ", "/");print;}'`
date -d $INPUT +%A
4
  • Awk part isn't necessary, really Commented Sep 17, 2015 at 14:41
  • 1
    Run $ date --date='03/08/15' +%A and $ date --date='03/08/15' +%A Commented Sep 17, 2015 at 14:42
  • @Serg two same commands? Anyway, the command you gave gives wrong output Commented Sep 17, 2015 at 14:46
  • 2
    @MathewRock Ah, I missed that OP needed European style input (day-month-year). OK, then it's correct. +1 Commented Sep 17, 2015 at 14:55
3

Perl has some nice built-in datetime modules:

$ perl -MTime::Piece -E '
     print "Input date (dd/mm/YYYY): ";
     chomp( $date = <> );
     $datetime = Time::Piece->strptime($date, "%d/%m/%Y");
     say $datetime->strftime("%e %B is a %A");
'
Input date (dd/mm/YYYY): 3/8/2015
 3 August is a Monday

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .