【问题标题】:Calculating days with BC bash用 BC bash 计算天数
【发布时间】:2015-04-11 05:25:34
【问题描述】:

所以我的脚本必须计算某人旅行回来的日期。用于使用用户输入计算离开日期和行程长度。每天都有一定的数字,比如 Monday-1;周二至 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 那样数数时,我的脚本就开始工作了;周一到 2 等,但周日必须为 0。

【问题讨论】:

  • 你应该取模 7 而不是 6。每周有 7 天。
  • comeback=$(( (${left} + ${days}) % 7 ))

标签: bash bc


【解决方案1】:

更正您的脚本:

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)"

【讨论】:

  • 只是为了迂腐,命令行参数通常被认为比read好得多。将${left}${days} 设为您的$1$2,并将您的提示放入-h,--help
  • @Gen 不客气。如果您愿意,可以单击左侧的复选标记(箭头按钮下方)将问题标记为已解决。
猜你喜欢
  • 2017-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-20
相关资源
最近更新 更多