skyler
skyler

Reputation: 8348

Formatting a date based on a variable in bash

How can I make my backup_filename function return a string (a filename) based on a passed-in date parameter?

#!/bin/bash
DBNAME="user_db"
FILENAME="${DBNAME}_%Y_%m_%d.pg"

backup_filename() {
    echo `$1 +"$FILENAME"`
}

BACKUP_FILENAME=$(backup_filename `date -d '2 days'`)
echo $BACKUP_FILENAME

This prints out the error line 6: Sun: command not found. I've tried different quoting strategies of $FILENAME but haven't had much luck.

Upvotes: 0

Views: 1126

Answers (3)

skyler
skyler

Reputation: 8348

Based on Dave S. answer I ended up doing this.

#!/bin/bash
DBNAME="user_db"
FILENAME="${DBNAME}_%Y_%m_%d.pg"

backup_filename() {
    echo $(date -d "${1} days" +"${FILENAME}")
}

BACKUP_FILENAME=$(backup_filename 2)
echo $BACKUP_FILENAME

Upvotes: 0

Bentoy13
Bentoy13

Reputation: 4974

You can try this script. It would work fine, you can change the format if you want. For a more customizable function, you pass the date format and the filename prefix as parameters:

#!/bin/bash
DBNAME="user_db"
FILENAME="${DBNAME}"
DATE_FORMAT="+%Y_%m_%d"

backup_filename() {
    BACKUP_FILENAME="${1}_"$(date -d "${2}" ${3})
}

backup_filename "$FILENAME" "2 days" "$DATE_FORMAT"
echo $BACKUP_FILENAME

Upvotes: 0

Dave S.
Dave S.

Reputation: 6419

Try this, it should get you pretty close to what you want:

#!/bin/bash
DBNAME="user_db"
FILENAME="${DBNAME}"

backup_filename() {
    BACKUP_FILENAME="${FILENAME}_${1}"
}

backup_filename `date -d '2 days' +%Y_%m_%d`
echo $BACKUP_FILENAME

Upvotes: 2

Related Questions