Lepší readme, 50_datum.sh - Přehled o tom jaký je den

main
Petr Varkoček 2 months ago
parent 91da5c1565
commit 5c2bcb9fca

@ -0,0 +1,153 @@
#!/bin/bash
#
# datum_tabulka.sh
# Vykresli ramecek s aktualnim datem/casem v cestine.
#
# Kompatibilita: bash 3.2+ (RHEL 5), coreutils/GNU sed jak jsou
# soucasti RHEL 5 a Debian Squeeze a novejsich. Nepouziva se zadny
# bashismus specificky pro bash 4+ (asociativni pole, ${var,,}, ...).
#
# POUZITI:
# 1) Spusteni jako samostatny skript:
# bash datum_tabulka.sh
#
# 2) "Nasourcovani" do interaktivniho shellu (napr. z ~/.bashrc),
# cimz se ziska prikaz "datum":
# echo 'source /cesta/k/datum_tabulka.sh' >> ~/.bashrc
# Po novem prihlaseni (nebo "source ~/.bashrc") pak staci
# napsat v terminalu:
# datum
#
# Pri sourcovani se nic samo nespusti - jen se definuje funkce
# "datum". Pri primem spusteni ("bash datum_tabulka.sh") se funkce
# rovnou i zavola.
# Pomocne funkce jsou prefixovany "_datum_", aby pri sourcovani do
# interaktivniho shellu nekolidovaly se jmeny jinych funkci/prikazu.
# Delka retezce v "znacich" (ne bajtech), nezavisla na locale:
# odstranime UTF-8 pokracovaci bajty (0x80-0xBF) a spocitame bajty,
# ktere zbyly - to odpovida poctu znaku bez ohledu na nastaveni LANG.
_datum_mb_len() {
printf '%s' "$1" | LC_ALL=C sed 's/[\x80-\xBF]//g' | LC_ALL=C wc -c | tr -d ' '
}
# Zopakuje znak $1 celkem $2 krat
_datum_repeat_char() {
local ch="$1"
local count="$2"
local out=""
local i=0
while [ "$i" -lt "$count" ]; do
out="${out}${ch}"
i=$((i + 1))
done
printf '%s' "$out"
}
# Hlavni funkce - vypise tabulku s aktualnim datem/casem
datum() {
# --- Ceske nazvy mesicu (2. pad) a dnu v tydnu -------------------
# index 0 je jen vycpavka, aby indexy odpovidaly cislu mesice/dne
local mesice
mesice=(x ledna února března dubna května června července srpna září října listopadu prosince)
local dny
dny=(x Pondělí Úterý Středa Čtvrtek Pátek Sobota Neděle)
# --- Nacteni zivych dat jednim volanim date, aby byla konzistentni
# %Y rok, %m mesic, %d den, %H hodina, %M minuta, %Z zkratka pasma,
# %u den v tydnu (1=po..7=ne), %V ISO tyden, %j den v roce, %s epoch
local rok mesic den hod min pasmo dow tyden denroku epoch
set -- $(date +"%Y %m %d %H %M %Z %u %V %j %s")
rok=$1
mesic=$2
den=$3
hod=$4
min=$5
pasmo=$6
dow=$7
tyden=$8
denroku=$9
epoch=${10}
# --- Prevod cisel bez uvodnich nul (aby se neinterpretovaly jako 8)
local den_n mesic_n dow_n tyden_n denroku_n
den_n=$((10#$den))
mesic_n=$((10#$mesic))
dow_n=$((10#$dow))
tyden_n=$((10#$tyden))
denroku_n=$((10#$denroku))
# --- Kvartal --------------------------------------------------------
local kvartal
kvartal=$(( (mesic_n - 1) / 3 + 1 ))
# --- Obsahove radky tabulky ------------------------------------------
local radek1 radek2 radek3 radek4 radek5 radek6 radek7
radek1="${den_n}. ${mesice[$mesic_n]} ${rok}"
radek2="${dny[$dow_n]}, ${tyden_n}. týden"
radek3="${hod}:${min} ${pasmo}"
radek4=""
radek5="Q${kvartal}, ${denroku_n}. den v roce"
radek6=""
radek7="Unix čas: ${epoch}"
# --- Vypocet sirky tabulky (podle nejdelsiho radku + fixni pridani) -
# Sirka je vypoctena z nejdelsiho radku a pak natrvalo rozsirena o 5
# znaku. Protoze extra_sirka je konstanta, je vysledna sirka tabulky
# fixni napric spustenimi (meni se jen kvuli delce textu samotneho).
local extra_sirka=5
local max=0
local radek l
for radek in "$radek1" "$radek2" "$radek3" "$radek4" "$radek5" "$radek6" "$radek7"; do
l=$(_datum_mb_len "$radek")
if [ "$l" -gt "$max" ]; then
max=$l
fi
done
max=$((max + extra_sirka))
# --- Vykreslovaci funkce (lokalni pres subshell, aby nezustaly) ------
_datum_print_border() {
local left="$1"
local right="$2"
printf '%s' "$left"
_datum_repeat_char "─" $((max + 2))
printf '%s\n' "$right"
}
_datum_print_line() {
local text="$1"
local len
len=$(_datum_mb_len "$text")
local pad=$((max - len))
printf '│ %s' "$text"
_datum_repeat_char " " "$pad"
printf ' │\n'
}
# --- Vykresleni tabulky ---------------------------------------------------
_datum_print_border "┌" "┐"
_datum_print_line "$radek1"
_datum_print_border "├" "┤"
_datum_print_line "$radek2"
_datum_print_line "$radek3"
_datum_print_line "$radek4"
_datum_print_line "$radek5"
_datum_print_line "$radek6"
_datum_print_border "├" "┤"
_datum_print_line "$radek7"
_datum_print_border "└" "┘"
# uklid pomocnych funkci definovanych uvnitr datum(), aby se
# neplichtily do jmenneho prostoru interaktivniho shellu
unset -f _datum_print_border _datum_print_line
}
# --- Spusteni jen pri primem volani skriptu, ne pri sourcovani -----------
# Pokud je soubor sourcovan (napr. z ~/.bashrc), pouze se definuje
# funkce "datum" a nic se nevypisuje. Pokud je soubor spusten primo
# (bash datum_tabulka.sh), funkce se rovnou zavola.
if [ "${BASH_SOURCE[0]}" = "${0}" ]; then
datum
fi

@ -2,9 +2,56 @@
Moje oblíbené dotfiles
Moje trošku vymazlené dotfiles pro bash.
Moje trošku vymazlené dotfiles pro bash. Kompatibilta by měla být RHEL 5/Debian Squeeze, pokud zde/ve skriptu není uvedeno jinak.
* mcd - mkdir a vejdi
* mman (mandpage) - Zobrazí manpage na svislé konzoli na mé mašině
* cman - Smaže svislou konzoli a zapne termclock.sh na mé mašině
* Proměnná PRODENV která mění barvu hostname v promptu aby odlišil smysl stroje (vyjma mé mašiny)
## Rozšíření v .bashrc.d
Všechny scripty v tomhle adresáři mají podmínky kde se dá nastavit zda je sourcovat nebo ne. Soubory navzdory příponě .sh nejsou míněny pro to být spustitelné. Ideální stav je nechat čitelné pro daného uživatele.
### 10_colored_man.sh
Default: Zapnuto
Asi nemá cenu moc rozepisovat. Pokud se sourcuje, manuálové stránky jsou barevnější, dá se v nich lépe vyznat. Mířeno na tmavé terminály.
### 20_emulate_pstree.sh
Default: Zapnuto
Záchranná berlička, pokud není nainstalován pstree, pokusí se o emulaci pstree v bashi.
### 30_man_konsole.sh
Default: Vypnuto
Background story: Můj setup je se 2mi monitory, levý na práci, pravý - pivot (na svislo) a na něm se po startu KDE Plasma otevře speciálně nastavená Konsole.
Tyto bash funkce ovládají zmíněnou konzoli.
* mman udělá ctrl+c na dané konzoli a vypíše manuálovou stránku
* cman zruší manuálovou stránku, vyčistí konzoli a spustí na ni termclock.sh
### 40_notes.sh
Default: Zapnuto
Jednoduché funkce které umožňují si uložit jednoduché jednořádkové poznámky. Pozdnámky se ukládají do ~/.notes a nějaké tipy pro bash jsem v souboru nechal
* notes - vypíše poznámky
* note_add [poznamka] - přidá poznámku
* note_rm [číslo poznámky] - odstraní poznámku
### 50_datum.sh
Default: Zapnuto
Jednoduchá funkce která vykreslí kalendářový list do terminálu se vším užitečným z repertoáru příkazu date
* datum - vykreslí tabulku
### 99_skeleton.sh.disabled
Nejedná se o script, ale o šablonu se vším potřebným pro to mít unifikované scripty v tomhle podadresáři. Díky jiné příponě se nikdy sourcovat nebude. Prostě cp ~/.bashrc.d/99_skeleton.sh.disabled ~/.bashrc.d/98_muj_projekt.sh a jedem...

Loading…
Cancel
Save