如何将日期传递给bashshell并从中计算?

如何将日期传递给bashshell并从中计算?,bash,Bash,我试图将一个日期字符串传递给bashshell并从中计算一个新的日期,下面是test1.sh #!/bin/bash echo "$1" MYDATE=$1 days = 5 echo $MYDATE DATE_FROM=$($MYDATE "--date=-$days day" +%F) 我称之为: sh ./test1.sh 2017-07-10 它得到了以下输出: 2017-07-10 2017-07-10 ./test1.sh: 8: ./test1.sh: 2017-07-10

我试图将一个日期字符串传递给bashshell并从中计算一个新的日期,下面是test1.sh

#!/bin/bash
echo "$1"
MYDATE=$1
days = 5

echo $MYDATE

DATE_FROM=$($MYDATE "--date=-$days day" +%F)
我称之为:

sh ./test1.sh 2017-07-10
它得到了以下输出:

2017-07-10
2017-07-10
./test1.sh: 8: ./test1.sh: 2017-07-10: not found
有什么想法吗?谢谢

更新: 以下是一个基于@John Goofy的工作版本:

#!/bin/bash

MYDATE="$1"
#DAYS=5      #or comment this line out and pass DAYS as argument $2


if [ -z "$2" ]; then
   DAYS = 10    
else  
   DAYS="$2"
fi 


NEWDATE=$(date --date="${MYDATE} + ${DAYS} day" +%Y-%m-%d)

echo $NEWDATE
称之为:

sh ./test1.sh 2017-07-10 5
天数设置为5,如果没有2美元,我希望是10天,但得到:

DAYS: not found

您缺少对
date
命令的调用:

DATE_FROM=$(date --date "$MYDATE - $days day" +%F)
此外,要使用
天的默认值,可以使用(请参阅)

此外,由于环境变量都是大写的,所以最好保持您的状态

请注意,更新中引入的
+%Y-%m-%d
日期格式与
+%F
相同(只是更详细)

所有这些结合在一起会产生一个脚本,该脚本可以满足您的需要,并且能够正确执行:

#!/bin/bash
start_date="$1"
days="${2:-10}"
end_date=$(date --date="${start_date} + ${days} day" +%F)
echo "${end_date}"
例如:

$ bash test1.sh 2017-07-10 5
2017-07-15

(请注意,如果您使用
sh
调用脚本,那么它在hashbang中是否具有
bash
并不重要,它是使用
sh
运行的。只有当您使用
chmod+x test1.sh
将脚本设置为可执行文件,然后像
/test.sh…
那样调用脚本时,才会使用hashbang。只有这样,shell才会从hashbang读取我创建的hashbang。)Interpreter应用于脚本。)

您的脚本应如下所示:

#!/bin/bash

MYDATE="$1"
DAYS=5      #or use DAYS="$2"  to pass DAYS as argument $2

NEWDATE=$(date --date="${MYDATE} + ${DAYS} day" +%Y-%m-%d)

echo $NEWDATE

如果您不传递参数,脚本将从现在开始计算。

我真的很惊讶您没有得到
bash:days:command not found
。您的系统上的
days
命令是什么?@AngeloC,请查看我的更新答案。将days设置为可选似乎无法使用以下代码:days=0如果[-z“$1”];然后天数=10 echo“empty”否则echo“not empty”天数=“$1”fi echo$days@AngeloC请将你的代码添加到你的OP中,不要在评论中添加任何额外的代码片段,因为我猜不出你想要什么或拥有什么。你的答案与我的有什么不同(15分钟后发布的除外)?请参阅和。