Получение дня недели в bash script
Я хочу иметь День недели в переменной DOW
.
Поэтому я использую следующий bash - script:
DOM=$(date +%d)
DOW=($($DOM % 7) ) | sed 's/^0*//'
Но там я получаю сообщение bash: 09: command not found
. Мой желаемый результат равен 2 (9% 7 = 2) в переменной $DOW
.
Как это реализовать?
Код работает для дней 1-8, но C-Hex нет номера более 8 доступных и появляется сообщение bash: 09: value too great for base (error token is "09")
.
Ответы
Ответ 1
Вы можете использовать флаг -
:
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
Ответ 2
Используйте %u
. Вот так:
DOW=$(date +%u)
На странице :
% u день недели (1..7); 1 - понедельник
Ответ 3
Использование другого% -спецификатора - это реальный ответ на ваш вопрос. Способ предотвратить bash от удушья на недействительных восьмеричных числах - сказать, что у вас на самом деле есть номер базы-10:
$ DOM=09
$ echo $(( DOM % 7 ))
bash: 09: value too great for base (error token is "09")
$ echo $(( 10#$DOM % 7 ))
2
Ответ 4
Я всегда обнаружил, что использование "let" является самым простым решением для BASH. Итак, это будет:
let "DOW = DOM % 7"