用 BC bash 计算天数

Calculating days with BC bash

所以我的脚本必须计算某人旅行回来的日期。用于计算使用用户输入的离开日期和行程长度。每天都有一定的数字,比如 Monday-1; Tuesday-2 等,但当星期日的用户输入必须为 0 时,它会变得复杂。

脚本 atm 我做了什么:

#!/bin/bash
#Data
echo -e "\e[00;31mRemember!\e[00m Sunday-0; Monday-1; Tuesday-2; Wednesday-3; Thursday-4; Friday-5; Saturday-6;"
echo
echo -n "What day will you leave? "
read left
echo -n "How long is your trip? "
read days
#Calculating
cb=`echo "$left+$days" | bc`
comeback=`echo "$cb % 6" | bc`
#Output
if [ $comeback = 0 ]; then
echo "You will be back at Sunday"
fi
if [ $comeback = 1 ]; then
echo "You will be back at Monday"
fi
if [ $comeback = 2 ]; then
echo "You will be back at Tuesday"
fi
if [ $comeback = 3 ]; then
echo "You will be back at Wednesday"
fi
if [ $comeback = 4 ]; then
echo "You will be back at Thursday"
fi
if [ $comeback = 5 ]; then
echo "You will be back at Friday"
fi
if [ $comeback = 6 ]; then
echo "You will be back at Saturday"
fi

我的问题是,当旅行超过一周或应该在周日结束时,它永远不会计算正确。 当我像 Sunday-1 一样开始数数时,我的脚本就开始工作了; Monday-2 等但星期日必须为 0.

要更正您的脚本:

comeback=$(echo "(${left} + ${days}) % 7" | bc)

此外,您应该使用数组进行输出:

days_of_week=( Sunday Monday Tuesday Wednesday Thursday Friday Saturday )
echo "You will be back on ${days_of_week[${comeback}]}"

我也想指出一个有趣的答案。使用 GNU coreutils 中的 date,您可以在阅读 $left$days:

后执行此操作
echo "You will be back on $(date -d "${days_of_week[${left}]} + ${days} days" +%A)"