Shell Prakticky
Úvod do příkazové řádky

Lukáš Bařinka

Cíl

Cílem je procvičení jednoduchých příkazů a základní pohyb v příkazové řádce.

Obsah

  • Dokumentace k příkazům
  • Použití proměnné
  • Počítání řádků
  • Práce s proměnnou
  • Ovládání příkazů a prompt

Část 1

Dokumentace k příkazům

Úloha 01

Vytvořte proměnnou DELIMITER a nastavte do ní hodnotu dvojtečka (:)


							~DELIMITER=:
						

Úloha 02

Vypište proměnnou DELIMITER pomocí příkazu declare


							~declare -p DELIMITER
						

Úloha 03

Vypište hodnotu proměnné DELIMITER pomocí příkazu printf (hodnota bude ukončená novým řádkem)


							~printf '%s\n' "$DELIMITER"
						

Úloha 04

Vypište hodnotu proměnné USER


							~declare -p USER
						

Část 2

Použití proměnné

Úloha 05

Příkazem getent passwd username vypište informace o svém uživatelském účtu

username nahraďte ručně za své uživatelské jméno.


							~getent passwd osboxes
						

Úloha 06

Použijte předchozí příkaz, ale místo ručně napsaného uživatelského jména použijte proměnnou USER

Pro vyvolání předchozího příkazu použijte , pro skok o slovo doleva CTRL+←, pro smazání do konce řádku CTRL+K


							~getent passwd "$USER"
						

Úloha 07

Pomocí příkazu tr nahraďte všechny výskyty znaku : za nový řádek (\n) ve výstupu předchozího příkazu

První argument tr bude : a druhý argument \n.
Pozor na to, že znak \ má v shellu speciální význam a je proto potřeba použít ' '


							~getent passwd "$USER" | tr : '\n'
						

Úloha 08

V předchozím příkazu nahraďte : za hodnotu proměnné DELIMITER


							~getent passwd "$USER" | tr "$DELIMITER" '\n'
						

Úloha 09

Výstup předchozího příkazu uložte do souboru username-info, kde username nahraďte za hodnotu proměnné USER


							~getent passwd "$USER" | tr "$DELIMITER" '\n' > "$USER-info"
						

Část 3

Počítání řádků

Úloha 10

Pomocí příkazu ls zjistěte, že se souboru skutečně vytvořil a jakou má velikost


							~ls -l "$USER-info"
						

Úloha 11

Pomocí příkazu wc a předcházejícího příkazu spočítejte počet položek výstupu příkazu getent

(tedy počet řádek po nahrazení : za nový řádek)


							~getent passwd "$USER" | tr "$DELIMITER" '\n' | wc -l
						

Úloha 12

Pomocí příkazu less přečtěte obsah vytvořeného souboru (poté příkaz ukončete)

Pro dokončení jména souboru použijte tabulátor.


							~less bar<TAB>
							~less barinkl-info
							<q>

							# <TAB> znamená stisk klávesy TAB
							# <q> znamená stisk klávesy q
						

Úloha 13

Spočítejte počet řádků vytvořeného souboru a porovnejte (ručně) s výsledkem z počítání položek

Použijte pro procházení historie.


							~getent passwd "$USER" | tr "$DELIMITER" '\n' | wc -l; \
							wc -l "$USER-info"
						

Úloha 14

Vytvořte soubor man.nl do kterého uložíte počet řádků manuálu příkazu man


							~man man | wc -l > man.nl
						

Úloha 15

Spočítejte počet řádků z výstupu předchozího příkladu

Měl by být 0, neboť všechen text je uložen do soboru nebo směřuje na chybový výstup.


							~man man | wc -l > man.nl | wc -l
						

Úloha 16

Spočítejte počet položek v adresáři


							~ls | wc -l

							# Pozor na ls -l, je tam navíc řádek s total
							ls -l | wc -l
						

Úloha 17

Pomocí příkazu rm soubor smažte vytvořené soubory, místo soubor zadejte jméno souboru, jmen může být více


							~rm "$USER-info" man.nl
						

Úloha 18

Pomocí příkazu ls ověřte, že soubory byly smazány


							~ls "$USER-info" man.nl
						

Úloha 19

Opět spočítejte počet položek v adresáři


							~ls | wc -l
						

Část 4

Práce s proměnnou

Úloha 20

Vytvořte proměnnou A s hodnotou abc a proměnnou B s hodnotou def


							~A=abc
							~B=def
						

Úloha 21

Vytvořte proměnnou C vzniklou zřetězením hodnot proměnných A a B


							~C="$A$B"
						

Úloha 22

Vypište proměnné A, B a C


							~declare -p A B C
						

Úloha 23

Přidejte na konec proměnné C řetězec ghi


							~C="$C"ghi

							# případně pro pokročilejší
							~C+=ghi
						

Úloha 24

Zkontrolujte, že proměnná C má skutečně hodnotu abcdefghi


							~declare -p C
						

Úloha 25

Spočítejte délku proměnné C (počet znaků) pomocí příkazů printf a wc


							~printf '%s' "$C" | wc -c

							# vyzkoušejte, že při použití echo, které přidává
							# znak nový řádek je výsledek špatně
							~echo "$C" | wc -c
						

Úloha 26

Vytvořte proměnnou text, do které uložíte několik řádků textu

Použijte přitom ' ' nebo " ".


							~text='nekolik
							radku
							textu'
						

Úloha 27

Vytvořte proměnnou kitty s následujícím obsahem:


							 /\__/\
							(='><'=)
							 (")(")_/`
						

							~kitty=' /\__/\
							(='"'><'"'=)
							 (")(")_/`'
						

Úloha 28

Vypište obsah proměnné kitty, aby vypadal jako v zadání


							~printf '%s\n' "$kitty"
						

Část 5

Ovládání příkazů a prompt

Úloha 29

Prostudujte si manuálovou stránku příkazu man


							~man man
						

Úloha 30

Najděte v textu řetězec ENVIRONMENT, jaká proměnná slouží k nastavení použitého stránkovače?


							/ENVIRONMENT

							# K nastavení stránkovače slouží proměnná PAGER
						

Úloha 31

Pokud před název příkazu napíšete přiřazení do proměnné, provede se pro zadaný příkaz, např: COLUMNS=200 ls /. Nastavte stránkovač tak aby místo zobrazení manuálové stránky zobrazil pouze počet slov a řádků v manuálové stránce a vyvolejte manuál příkazu man


							~PAGER='wc -wl' man man
						

Úloha 32

Spusťte příkaz sleep 1000 a po chvíli jej ukončete


							~sleep 1000
							<CTRL+C>
						

Úloha 33

Uložte hodnotu proměnné PS1 do proměnné oldPS1


							~oldPS1="$PS1"
						

Úloha 34

Nastavte proměnnou PS1 tak, aby prompt zobrazoval aktuální čas, uživatelské jméno a aktuální adresář a končil znakem >


							~PS1='\t \u \w> '
						

Úloha 35

Nastavte proměnnou PS1 na původní hodnotu pomocí oldPS1


							~PS1="$oldPS1"