Что такое диалог пароля в plymouth?

Использование bash (или ksh93 ), и GNU date :

for (( i = 0; i < 8; ++i )); do
    printf '%s\t' "$( date -d "now +$i days" +"%a" )"
done

echo

for (( i = 0; i < 8; ++i )); do
    printf ' %d\t' "$( date -d "now +$i days" +"%e" )"
done

echo

Формат % a даст вам сокращенный день недели в текущей локали, а % e даст вам день месяц как целое число.

Результат (разделенные табуляцией):

Tue     Wed     Thu     Fri     Sat     Sun     Mon     Tue
 7       8       9      10      11      12      13      14

ОБНОВЛЕНИЕ для ksh93 после комментариев: (обратите внимание, это не работает, поскольку оболочка не проверяет даты должным образом)

#!/bin/ksh93

yearmonth=$( date +"%Y%m" )

d=1
while printf '%(%a)T\t' "$( printf '%s%02d' "$yearmonth" "$d" )" 2>/dev/null
do
    (( ++d ))
done
echo

days_this_month=$(( --d ))
while (( d > 0 )); do
    printf ' %d\t' "$(( days_this_month - (--d) ))"
done
echo

yearmonth сначала устанавливается текущий год и месяц в формате YYYYMM . Затем я перебираю все будние дни этого месяца. Цикл устанавливает wday как сокращенный день недели, и он завершается, когда я пытаюсь получить день недели для недействительной даты.

Второй цикл просто печатает целые числа, столько, сколько нам нужно, чтобы заполнить месяц.

Вывод за февраль 2017 г .:

Wed     Thu     Fri     Sat     Sun     Mon     Tue     Wed     Thu     Fri     Sat     Sun     Mon     Tue     Wed     Thu     Fri     Sat     Sun     Mon     Tue     Wed     Thu     Fri     Sat     Sun     Mon     Tue
 1       2       3       4       5       6       7       8       9       10      11      12      13      14      15      16      17      18      19      20      21      22      23      24      25      26      27      28

Решение с использованием ksh93 с Perl и Date :: Calc :

#!/bin/ksh93

ym=( $(date +"%Y %m") )

days=$( perl -MDate::Calc -e 'print Date::Calc::Days_in_Month($ARGV[0],$ARGV[1])' -- "${ym[0]}" "${ym[1]}" )

for d in {1..$days}; do
    printf '%(%a)T\t' "$( printf '%d-%d-%02d' "${ym[@]}" "$d" )"
done
echo

for d in {1..$days}; do
    printf '%d\t' "$d"
done
echo
1
24.01.2016, 15:14
0 ответов

Теги

Похожие вопросы