Подтвердить что ты не робот

Получение дня недели в 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").

4b9b3361

Ответ 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"