5. cvičení
Programování v shellu (Bash)
    
    # Retezce
    string="Unix is the best"
    # Delka retezce
    echo ${#string}
    # Podretezec
    # Syntaxe: ${string::}
    string="Unix is the best"
    ${string:1:1}
    # Index podretezce
    string="Unix is the best"
    substring="t"
    expr index "$string" "$substring" # -> Prvni vyskyt t je na indexu 8
    # Pokud vynechame delku podretezce tak se pokracuje az do konce
    string="Unix is the best"
    echo ${string:1}           # $string bez prvniho znaku
    echo ${string:12}          # best
    # Nahrazeni retezce
    # Nahrazeni prvniho vyskytu
    string="Unix is the best. Unix"
    echo ${string[@]/Unix/Windows}  # Windows is the best, Unix
    # Nahrazeni vsech vyskytu
    string="Unix is the best. Unix"
    echo ${string[@]//Unix/Windows} # Windows is the best, Windows
    # Odstraneni podretezce (nahrazeni prazdnym)
    string="Unix is the best. Unix"
    echo ${string[@]// the/} # Unix is best. Unix
    # Funkce
    # Definice funkce
    function add {
        echo $(($1 + $2))
    }
    # Volani funkce je totozne s volanim prikazu
    add 1 1
    # Pokud chceme ulozit vysledek do promenne tak musime v tele funkce pouzit echo
    sum=$(add 2 2)
    echo $sum
    # Prace se soubory
    # Existence souboru
    filename="text.txt"
    if [ -e "$filename" ]; then
        echo "File $filename exists"
    fi
    # Existence adresare
    directory_name="unix"
    if [ -d "$directory_name" ]; then
        echo "Directory $directory_name exists"
    fi
    # Pole
    #Deklarace pole
    array=(Homer Marge "The Simpsons" Magie)
    # Prirazeni
    array[2]=Bart
    # Delka pole
    echo  ${#array[@]}
    # Pridani prvku do pole
    array[4]="Lisa"
    echo ${#array[@]}                    # 5
    echo ${array[${#array[@]}-1]}     # Magie
    # Append
    array+="Ned"
    # Vypis pole
    printf '%s\n' "${array[@]}"
          
    
        Úkoly
Obě Skupiny
- 
                Napište funkce convert_to_decimalaconvert_from_decimal. Funkceconvert_to_decimalbere dva argumenty první je číslo a druhy je poziční soustava (2 až 64). Funkce převede číslo do desítkové soustavy. Funkceconvert_from_decimalbere také dva argumenty, kde první je číslo v desítkové soustavě a druhý argument je soustava do které mame číslo převést. Čísla větší než 9 jsou malá a velká písmena anglické abecedy a znaky @ a _.parallels@ubuntu:/media/psf/PhD/UNIX/Lectures$ ./homework_8.sh convert_from_decimal 222 3 -> 22020 convert_from_decimal 222 16 -> de convert_from_decimal 222 32 -> 6u convert_to_decimal 22020 3 -> 222 convert_to_decimal de 16 -> 222 convert_to_decimal 6u 32 -> 2221 bod 
- 
                Implementujte jako funkce (zjednodušené) programy dirname a basename: z cesty zadané jako parametr, po odebrání případného / na konci, vrátí (vypíše) část do a od poslední / (bez něj, pokud to není jediný znak). Pokud již cesta / neobsahuje, dirname vrátí '.' a basename celé jméno. parallels@ubuntu:/media/psf/PhD/UNIX/Lectures$ ./homework_9.sh /media/psf/PhD/UNIX/ basename UNIX dirname /media/psf/PhD parallels@ubuntu:/media/psf/PhD/UNIX/Lectures$ ./homework_9.sh /media/psf/PhD/UNIX/Lectures/homework_9.sh basename homework_9.sh dirname /media/psf/PhD/UNIX/Lectures1 bod 
- 
            V systému bývá zvykem, že se u logů provadí tzv. rotace. Soubor xyse přejmenuje naxy.0,xy.0naxy.1atd. až do nějaké horní hranice, soubory s číslem nad touto hranicí se vymažou. Napište program, který dostává dva parametry - jméno souboru a maximální počet uložených kopií (lze vynechat, implicitní hodnota je 30) - a proveďte rotaci.1 bod