如何将日期传递给bashshell并从中计算?
我试图将一个日期字符串传递给bashshell并从中计算一个新的日期,下面是test1.sh如何将日期传递给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
#!/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分钟后发布的除外)?请参阅和。