Bash pro začátečníky/Skripty

Z Wikiverzity
Jak používat klasifikační nálepkuTato stránka je součástí kurzu:
začátečníci
Příslušnost: všeobecná

Skripty[editovat]

Až zde vytvoříte pár skriptů, můžete se pustit do kurzu Bash pro středně pokročilé. Aby bylo jasno tak do subnadpisu uvádíme pokud máme pocit, že jsme skript správně napsali a otestovali (vyřešeno) či či ještě pracujeme (dořešit).

Po stisku klávesy kalkulačka se objeví MATE Calculator, nebo se přenese do popředí, ten již zobrazený (dořešit)[editovat]

Příkaz vu spustí skript vicuna.sh (vyřešeno)[editovat]

  • například v /diskD/Bash/skripty/ vytvoříme skript vu:
#!/bin/bash

#Initiate sh shell to run vicuna.sh
sh ~/diskD/Vicuna/Test1/vicuna/bin/vicuna
  • skript vu umístíme do /usr/local/bin například přemístěním z jiné lokace, kde jsem ho editovali (sudo cp ./diskD/Bash/skripty/vu /usr/local/bin)
  • přesunem se do onoho adresáře přes cd /usr/local/bin a zjistíme jeho práva přes ls -l vu, případně udělíme práva spouštět všem skupinám přes sudo chmod +x vu
  • následně by příkaz terminálu vu měl spustit vicuna.sh

Každý týden vyskočí notifikační okno upozorňující, že je potřeba provést backup (dořešit)[editovat]

  • Zde využívám nástroj cron a příkaz zenity. Postup je následující:
    1. Napřed si otevřu tabulku cronu a budu ji editovat pouze pro sebe jako přihlášeného uživatele: crontab -e (je otázka, jestli mi to bude vyhovovat a jestli nebude potřeba to předělat pro všechny uživatle)
    2. Poté vložím následující kód:
0 20 * * 7  zenity --info --text="Otevři Backups a zálohuj!" --no-wrap --width=600 --height=500

Znaky před zenity určují, kdy se příkaz zenity spustí. Funkce jednotlivých znaků cronu jsou následující:

  1. Minuty (možný rozsah 0 až 59), pokud chci tedy, aby se příkaz spustil přesně v 8 večer, musí zde být nula
  2. Hodiny (0 až 23), 20 je tedy 8 hodin večer
  3. Den v měsící (1 až 31) - jelikož nevím, který den v měsíci je neděle, dávám tedy hvězdičku, která určí, že se jedná o jakýkoliv den v měsíci
  4. Měsíc (1 až 12) - jelikož chci příkaz spouštět každý týden, musím sem dát hvězdičku
  5. Den v týdnu (1 až 7, neděle může mít hodnotu 7 i 0), pokud chci tedy příkaz spoustět každou neděli dám 7

A nyní příkaz zenity:

  • --info značí, že se jedná o informativní box
  • --text je samotný text v boxu
  • --no-wrap znamená, že se text nezalomí
  • --width a --heigth urči velikost boxu

Testování:

  • skrypt se nespustil a mám podezření, že důvodem je to, že byl nastaven v cronu pro aktuálního uživatele
    • tak podle chatGPT 4 se cron spouští tím uživatelem, který je přihlášený
  • pak mě napadlo, že možná skript nebyl spuštěn, protože byl zrovna počítač v režimu spánku
    • a G 4 to potvrzuje a navrhuje mi místo toho zkusit anacron (který mám nainstalován) a který je určen pro zařízení, která nejsou zapnuta 24/7
    • a v man anacron čtu, že se skript spustí v době na kterou byl naplánován, nebo hned jak vyjde ze zmražení
    • nicméně anacron neumí spustit script k určitému datu, kdybych chtěl spouštět každé pondělí tak to nedokáže, protože počítá vždy určitý čas od spuštění. Pokud se tedy spuštění kvůli vypnutému počítači posune o dva dny, třetí spuštění pak bude zase posunuté o dva dny. Takže tato cesta také není vhodná.

Debugování dle chatGPT 4:

  • Hypotéza zenity není v proměnné $PATH, protože cron může využívat jinou proměnou PATH
    • zjistíme, jaká je cesta k příkazu zenity: which zenity
    • zjistíme jaké cesty jsou v $PATH cronu: crontab -e a pak * * * * * echo $PATH > /tmp/cronpath.txt, zobrazíme micro /tmp/cronpath.txt a zjistíme, jestli je tam ta cesta
    • výsledek, je že zenity je v PATH cronu, můžeme odstranit * * * * * echo $PATH > /tmp/cronpath.txt z crontab a případně odstranit tento soubor rm /tmp/crontpath.txt
  • ...