用bash脚本获取星期几

时间:2014-04-09 08:10:56

标签: bash sed

我希望变量DOW中包含星期几。

所以我使用以下bash脚本:

DOM=$(date +%d)
DOW=($($DOM % 7) ) | sed 's/^0*//'

不幸的是我收到错误:bash: 09: command not found。变量$DOW中的预期结果为2(9%7 = 2)。

我怎样才能使这个工作? 它适用于1-8天,但由于C-hex,没有超过8的可用数字,并显示以下消息:bash: 09: value too great for base (error token is "09")

5 个答案:

答案 0 :(得分:93)

使用%u。像这样:

DOW=$(date +%u)

来自man page

  

%u。星期几(1..7); 1是星期一

答案 1 :(得分:2)

使用不同的%-specifier是您问题的真正答案。阻止bash阻塞无效八进制数的方法是告诉它你实际上有一个基数为10的数字:

$ DOM=09
$ echo $(( DOM % 7 ))
bash: 09: value too great for base (error token is "09")
$ echo $(( 10#$DOM % 7 ))
2

答案 2 :(得分:2)

在这里工作正常

#!/bin/sh
DOW=$(date +"%a")
echo $DOW

答案 3 :(得分:0)

我总是发现使用' let'是BASH最简单的解决方案。那就是:

let "DOW = DOM % 7"

答案 4 :(得分:-5)

您可以使用-标志:

DOM=$(date +%-d)
             ^

这会阻止用0填充这一天。

来自man date

   -      (hyphen) do not pad the field

观察差异:

$ DOM=$(date +%d)
$ echo $((DOM % 7))
bash: 09: value too great for base (error token is "09")
$ DOM=$(date +%-d)
$ echo $((DOM % 7))
2