【问题标题】:program to check if today is sunday [duplicate]检查今天是否是星期天的程序[重复]
【发布时间】:2019-02-10 21:22:09
【问题描述】:

这个程序要检查今天是否是星期天

#!/bin/bash
    datetoday="$(date|cut -d ' ' -f 1)"
echo "${datetoday}"
s2="Sun"
if [ "${datetoday}" == "$s2" ]
then
echo "weekend"
else
echo "not weekend"
fi

【问题讨论】:

  • 你的问题是什么?
  • 而不是date | cut ...试试date +%a
  • 当我运行它时,它给了我输出“Wed␊not周末”。你是如何运行脚本的?
  • 这可能会有所帮助:[[ $(date +"%u") -eq 3 ]] && echo "Wednesday"man date
  • 欢迎来到stackoverflow。这个问题在这里已经有了答案:stackoverflow.com/questions/3490032/…

标签: bash shell scripting


【解决方案1】:

date 可以输出你所在的那一天,%a(星期日)和%A(星期日)。 两个都够了:

#!/bin/bash
today="$(date +%a)"
sun="Sun"
[ "${today}" = "${sun}" ] && printf "weekend\n" || printf "not weekend\n"
exit 0

您可以轻松地使用%Asun 设置为Sunday 而不是Sun (sun="Sunday")

如果您需要检查所有天,您可以将测试与 case 语句交换,如下所示:

#!/bin/bash
today="$(date +%a)"
case "${today}" in
  Mon|Monday)
    printf "not weekend\n"
    ;;
  ### etc.
  Sun|Sunday)
    printf "weekend\n"
    ;;
esac
exit 0

编辑:正如@tinita 所说,如果您没有设置适当的语言环境,您可能无法将这一天与“Sunday”匹配(例如法语中的“Dimanche”和意大利语中的“Domenica”)。

您可以避免这种更改语言环境,或使用date 的另一个选项。

事实上,date +%u 会给你一个从 1 到 7 的数字,其中 1 是星期一。

#!/bin/bash
today="$(date +%a)"
[ "${today}" -eq 7 ] && printf "weekend\n" || printf "not weekend\n"
exit 0

@chepner 注意到的另一件事是,如果您正在将输出写入文件并且文件系统中没有足够的空间来写入“weekend\n”(8 个字节),那么快捷方式 a && b || c 将不会工作。

撇开横向滑动不谈,确实,快捷方式不是发出if 声明的正确方式,您应该始终更喜欢规范方式:

#!/bin/bash
today="$(date +%a)"
if [ "${today}" -eq 7 ]; then
  printf "weekend\n"
else
  printf "not weekend\n"
fi
exit 0

【讨论】:

  • 不要使用a && b || c 作为正确的if 语句的快捷方式。如果b 有可能失败,则两者不等价。
  • 请注意,如果不设置语言环境,这将无法移植
  • @chepner 你是对的,因为用printf 打印一个静态字符串不会失败,这相当于if 声明@tinita 你是对的,我只是“硬编码”英国日因为这个问题是用Sun
  • printf 可以失败,即使是硬编码的字符串。一个示例是调用者将标准输出重定向到完整文件系统上的文件的脚本。根本没有理由用这个 hack 替换 if 语句的完全正确用法。
猜你喜欢
  • 2018-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-13
  • 1970-01-01
  • 2021-11-28
  • 2011-07-07
相关资源
最近更新 更多