Metų progresijos vizualizavimas „Bash“ skriptuose


 

Prieš keletą dienų naršydamas Mastodone pastebėjau kažkieno pabūstintą įdomų paveiksliuką, kuriame buvo vizualiai atvaizduotas metų progresas procentais. Šis vaizdas mane įkvėpė sukurti paprastą „Bash“ funkciją, kurią galėčiau integruoti į savo kasdieninius skriptus. Ši funkcija man padeda stebėti metų progresą, rodyti jį terminalo lange ir naudoti įvairiuose backup bei informacijos išvedimo procesuose.


#!/bin/bash
# Description: Parodo metų progresą
# URL: https://funkcijos.wordpress.com/2024/05/28/metu-progresijos-vizualizavimas-bash-skriptuose/
 
metu_progresas() {
    local bar_length=${1:-40}  # Numatytoji juostos ilgis yra 40, jei nenurodytas kitas
    local filled_color="\e[1;33m"  # Ryškiai geltona spalva užpildytiems simboliams
    local empty_color="\e[37m"     # Balta spalva tuštiems simboliams
    local reset_color="\e[0m"      # Numatytoji spalva
 
    # Gauti dabartinę dieną (metų dienos numeris)
    current_day=$(date +%-j)
 
    # Gauti iš viso metų dienų skaičių
    total_days=$(date -d "Dec 31" +%-j)
 
    # Apskaičiuoti metų progresą procentais
    progress=$((current_day * 100 / total_days))
 
    # Apskaičiuoti užpildytų ir tuščių simbolių skaičių
    filled_chars=$((progress * bar_length / 100))
    open_chars=$((bar_length - filled_chars))
 
    # Sukurti vizualią juostą su "█" užimtai vietai ir "░" laisvai vietai
    bar=$(printf "%0.s█" $(seq 1 $filled_chars))
    bar+=$(printf "%0.s░" $(seq 1 $open_chars))
 
    # Parodyti rezultatą su spalvomis
    echo -e "Metų progresas: ${filled_color}[${bar:0:filled_chars}${empty_color}${bar:filled_chars}] ${reset_color}${progress}%"
}
 
metu_progresas

Kaip funkcija veikia?

  1. Juostos ilgis: Funkcija priima vieną neprivalomą argumentą bar_length, kuris nustato vizualinės juostos ilgį. Jei argumentas nenurodytas, naudojama numatytoji reikšmė – 40 simbolių.
  2. Spalvų parinktys: Naudojamos trys spalvų parinktys: ryškiai geltona (filled_color) užpildytiems simboliams, balta (empty_color) tuštiems simboliams ir numatytoji spalva (reset_color) rezultatui atstatyti.
  3. Dabartinė diena: Funkcija naudoja date +%-j, kad gautų dabartinę dieną metų dienos formatu.
  4. Bendras dienų skaičius: Naudojama date -d "Dec 31" +%-j, kad nustatytų bendrą dienų skaičių metuose.
  5. Progresas procentais: Apskaičiuojamas metų progresas procentais, naudojant formulę current_day * 100 / total_days.
  6. Simbolių skaičius: Apskaičiuojamas užpildytų (filled_chars) ir tuščių (open_chars) simbolių skaičius, remiantis juostos ilgiu ir progreso procentais.
  7. Vizuali juosta: Naudojant printf ir tr, sukuriama vizuali juosta iš užpildytų ir tuščių simbolių.
  8. Rezultato atvaizdavimas: Rezultatas parodomas terminale su spalvota juosta ir procentiniu progreso atvaizdavimu.

Ką Dar Galima Patobulinti?

  1. Konfigūruojamos spalvos: Leisti vartotojui pasirinkti spalvas per funkcijos parametrus.
  2. Dinaminis atnaujinimas: Pridėti ciklą, kuris dinamiškai atnaujintų progresą realiuoju laiku (pvz., kas valandą ar kas dieną).
  3. Integracija su kitais skriptais: Funkciją integruoti į didesnius skriptus ar sistemas, kurios reikalauja progreso atvaizdavimo.
  4. Progresas per kitus laiko intervalus: Pritaikyti funkciją, kad rodytų ne tik metų, bet ir mėnesių ar savaičių progresą.
  5. Grafinių elementų palaikymas: Integruoti grafiką ar kitus vizualinius elementus, naudojant ASCII meną ar kitas terminalo grafikos galimybes.

Išvada

Ši funkcija „metu_progresas“ yra paprastas, bet veiksmingas būdas vizualizuoti metų progresą „Bash“ skriptuose. Ji gali būti lengvai pritaikoma ir išplėtojama, atsižvelgiant į specifinius poreikius. Tikiuosi, kad ši funkcija bus naudinga tiek jūsų kasdieniams skriptams, tiek ir didesniems projektams. Jei turite kokių nors klausimų ar pasiūlymų, nedvejodami palikite komentarą žemiau!

Komentarai

Populiarūs šio tinklaraščio įrašai

Configuring a NixOS firewall for everyday use

Setting up syncthing as a service on openSUSE and other Linux distributions

Monitoring SFTP server updates with Python