Toto jsou zhuštěné poznámky z prvního běhu, nikoli materiály k samostudiu.
ls *.txt
ls *[AB].txt
ls *A.txt *B.txthead -n3 *.dat získá první 3 řádky všech souborů končící na .dat
jmeno=minotaur.dat !nesmí být mezery vedle rovnítka
echo $jmeno vypíše proměnnou jmeno na stdout
příklad použití:
head -n2 $jmeno | tail -n1 získáme druhý řádek ze souboru minotaur.dat, který je uložený v proměnné jmeno
moje_skrolovatko=head $moje_skrolovatko unicorn.dat
PAGER=more git log PAGER - proměnná prostředí
env vypíše všechny proměnné prostředí
PS1 do této proměnné se dá zapsat, čím nám bude začínat každý řádek v bashi, můžeme přepsat např. jen na PS1='$ '
PS2 je pokračovací znak (při víceřádkovém zadávání v shellu)
$? návratová hodnota posledního příkazu
$$ hodnota procesu
echo ${jmeno}abc výstup: minotaur.databc
složené závorky je potřeba použít pokud skládáme proměnnou s řetězcem
$@ použije všechny argumenty, nejlépe dávat do uvozovek
for jmeno in a b c
do
echo $jmeno
doneCyklus se dá také zapsat na jeden řádek, v tom případě musí být jednotlivé příkazy odděleny středníkem:
for jmeno in a b c; do echo $jmeno; doneV našem případě budeme chtít vypsat druhý řádek ze souborů creatures:
for x in *.dat
do
head -n 2 $x | tail -n 1
donewhile true; do head /dev/urandom|sha256sum; donepomocí PageUp / PageDn můžu listovat v historii
např. zadám cat a pak procházím všemi zadanými příkazy
ctrl-R: stisknu ctrl-R, pak zadám část příkazu a zobrazí se mi nejbližší příkaz který vyhovuje podmínce. Pokud chci procházet dále, pak opakovaně použiji ctrl-R.
history - zobrazení historie
ctrl-D ukončí zadávání vstupu
ctrl-L vyčistí obrazovku
ctrl-W smaže slovo
ctrl-šipky přesunují mezi slovy
ctrl-s pozastaví výstup (jakoby terminál zamrznul), ale příkazy se provádí
ctrl-q zobrazí vše, co bylo stisknuto po ctrl-s
ctrl-Z pozastaví právě prováděný příkaz a vrátí vás zpět do příkazové řádky, k zastavenému příkazu se lze vrátit pomocí
[1]+ Stopped python
jobs - jaké jsou pozastavené příkazy fg - vrátí se k poslednímu zastavenému příkazu bg - spustí se zastavený program na pozadí kill %1 - můžu ukončit konkrétní proces (zastavený příkaz číslo 1)
pokud spustím příkaz s & na konci, spustí se proces přímo na pozadí
gitk --all &
Do souboru můžu zapisovat bash příkazy, které se postupně provedou.
touch klasifikace
do souboru zapíšeme:
for x in *.dat
do
head -n 2 $x | tail -n 1
doneNásledně skript spustím. Musím být ve složce, která obsahuje tento soubor.
bash klasifikace
Na začátek skriptu by se měl zapsat shebang, který říká jakým program se soubor bude spouštět. V našem případě chci spouštět bash:
#! /bin/bash
ls -l klasifikace zobrazí informaci o souboru, důležitá jsou práva: rw-rw-r--
tyto práva se opakují 3x za sebou, pro ...
přidat právo na spuštění:
chmod +x klasifikaceshebang:
v souboru:
#! /usr/bin/cat
Tady jsou informace$ cat READMEpři zadání pouze $ klasifikace nebude fungovat, protože cesta ke klasifikaci není v $PATH
$ echo $PATH
/home/user/.local/bin:/home/user/bin:/usr/share/Modules/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/var/lib/snapd/snap/binv /home/user/bin můžeme definovat vlastní příkazy
~/.bashrc soubor ve kterém je možné definovat úpravy v prostředí, např. přidat cesty do Path, upravit PS1, atd.
klasifikuj:
#! /bin/bash
head -n2 "$1" | tail -n1uvozovky - argument dávat do uvozovek, protože v případě kdy je převzatém argumentu mezera, vzala by se jinak pouze část $0 - nultý argument, tedy název programu ./klasifikuj minotaur.dat
grep not haiku.txt hledá v souboru haiku.txt řetězec not a vypíše každý řádek s tímto řetězcem
přepínače:
regulární výrazy grep -i .+ haiku.txt grep -i '.*' haiku.txt
find . -name '*.txt' hledá v tomto adresáři a všech podadresářích .txt soubory
Inspirace Bashe: https://github.com/encukou/bin
Naklonuj si tyto repozitáře (přímo v adresáři pro tento kurz; git clone udělá nový podadresář):
$ git clone https://github.com/pyladiescz/pyladies.cz
$ git clone https://github.com/pyvec/pyvo-data
Data si prohlédni a zjisti, co se v nich skrývá za informace. Zvlášť doporučuju třeba soubor pyvo-data/series/brno-pyvo/events/2018-10-25-casove.yaml.
Použij základní shellové příkazy (ne Python) na zodpovězení těchto otázek:
Kolik bylo kurzů/srazů PyLadies?
Kolik bylo Pyv v Brně?
Z kolika Pyv jsou videa?
Vypiš všechna místa konání Pyv (stačí identifikátor jako artbar) a kolikrát tam Pyvo bylo.
YAML soubory by se správně měl číst knihovnou na YAML, aby byla zachována struktura. Ty je ale ber jako "čistý text", kde hledané informace jsou na čádcích ve tvaru klíč: hodnota (příp. s nějakýma mezerama a/nebo pomlčkama navíc). Odpovědi tak nemusí být 100% přesné.
V Pythonu napiš funkci, která bere řetězec a vrátí "obrácený" řetězec: znaky jsou v něm pozpátku a podle následujícího slovníku. Znaky, které ve slovníku nejsou, program vypíše nezměněné.
(Nápověda k Pythonu je níže.)
{'a': 'ɐ', 'b': 'q', 'c': 'ɔ', 'd': 'p', 'e': 'ǝ', 'f': 'ɟ', 'g': 'ƃ',
'h': 'ɥ', 'i': 'ᴉ', 'j': 'ɾ', 'k': 'ʞ', 'l': 'l', 'm': 'ɯ', 'n': 'u',
'o': 'o', 'p': 'd', 'q': 'b', 'r': 'ɹ', 's': 's', 't': 'ʇ', 'u': 'n',
'v': 'ʌ', 'w': 'ʍ', 'x': 'x', 'y': 'ʎ', 'z': 'z', 'A': '∀', 'B': 'B',
'C': 'Ɔ', 'D': 'D', 'E': 'Ǝ', 'F': 'Ⅎ', 'G': 'פ', 'H': 'H', 'I': 'I',
'J': 'ſ', 'K': 'ʞ', 'L': '˥', 'M': 'W', 'N': 'N', 'O': 'O', 'P': 'Ԁ',
'Q': 'Q', 'R': 'R', 'S': 'S', 'T': '┴', 'U': '∩', 'V': 'Λ', 'W': 'M',
'X': 'X', 'Y': '⅄', 'Z': 'Z', '0': '0', '1': 'Ɩ', '2': 'ᄅ', '3': 'Ɛ',
'4': 'ㄣ', '5': 'ϛ', '6': '9', '7': 'ㄥ', '8': '8', '9': '6', ',': "'",
'.': '˙', '?': '¿', '!': '¡', '"': '„', "'": ',', '`': ',', '(': ')',
')': '(', '[': ']', ']': '[', '{': '}', '}': '{', '<': '>', '>': '<',
'&': '⅋', '_': '‾'}
Např.:
>>> obrat("Ahoj, brněnské PyLadies!")
'¡sǝᴉpɐ˥ʎԀ éʞsuěuɹq 'ɾoɥ∀'
Udělej z toho program pro příkazovou řádku, který bere soubory k obrácení. Když nedostane žádný argument, použije standardní vstup. Argument - taky znamená standardní vstup.
$ echo Ahoj | obrat
ɾoɥ∀
$ echo Ahoj | obrat -
ɾoɥ∀
$ echo 'Ahoj,
> PyLadies!' > pozdrav.txt
$ obrat pozdrav.txt
'ɾoɥ∀
¡sǝᴉpɐ˥ʎԀ
$ echo haha | echo obrat pozdrav.txt - pozdrav.txt
'ɾoɥ∀
¡sǝᴉpɐ˥ʎԀ
ɐɥɐɥ
'ɾoɥ∀
¡sǝᴉpɐ˥ʎԀ
Zařiď, aby s přepínačem --help program vypsal krátkou nápovědu (a ignoroval ostatní argumenty).
Je-li použit jiný přepínač (začínající -), program by měl učivateli vynadat (na chybovém výstupu), vrátit chybovou návratovou hodnotu a ignorovat ostatní argumenty.
Nakonec program změň tak, aby vracel chybovou návratovou hodnotu když některý znak chybí ve slovníku.
$ echo Ahoj | obrat
ɾoɥ∀
$ echo $?
0
$ echo Čau | obrat
nɐČ
$ echo $?
1
Naimportuješ-li sys a os, pak:
sys.argv je seznam argumentů (včetně jména programu)sys.stdin je už otevřený soubor se std. vstupem (netřeba with či close)sys.stdout je soubor se standardním výstupem (tam píše print) a sys.stderr je soubor chybovým výstupem.os.environ je slovník* s proměnnýma prostředíexit(1) ukončí program s danou hodnotou(* přesněji řečeno, objekt který se chová jako slovník)