Samnick Posted February 23, 2023 Share Posted February 23, 2023 shell není jen příkazový řádek pro jednotlivé příkazy je to programovací jazyk pro psaní skriptů skript je soubor obsahující posloupnost příkazů Nezáleží na koncovce, nemusí být, je zvykem .sh Na prvním řádku označení interpretu (jaký program má tento skript zpracovat) BASH (shell): #!/bin/bash Např PHP #!/bin/php -f Existují dva druhy příkazů interní příkazy BASHe externí programy Základy SHELLu Obvykle 1 příkaz na řádek více příkazů na řádek cd /; echo “Text“; mkdir samnick Jeden příkaz na více řádků (pro přehlednost) prikaz --parametr1 --parametr2 \ --parametr3 Komentář: # Parametry Parametry jsou odděleny mezerou ./skript.sh parametr1 parametr2 Parametr uzavřeme do uvozovek ./skript.sh “toto je parametr 1“ parametr2 Pozor na víceslovné adresáře a soubory cat Program Files\soubor.txt Ve skript se k hodnotám parametrů dostaneme přes $N $1 – první parametr $2 – druhý parametr atd. $0 – název skriptu (skript.sh) $$ - PID aktuálního procesu $# - počet parametrů Proměnné Vytvoření proměnné zadáním hodnoty Nepsaným standardem je psát proměnné velkými písmeny CESTA=/files/server SOUBOR=“$1“ ZDROJ=“$CESTA/$SOUBOR“ CIL=/fivem cp “$ZDROJ“ “$CIL“ Pozor na víceslovné hodnoty Je vždy lepší používat uvozovky Tento příkaz nefunguje a výsledkem je něco jiného SOUBOR=nazev souboru Složitější situace s názvem proměnné a následujícího textu echo $PREFIX_nasledujici_text # špatně echo ${PREFIX}_nasledujici_text Pro získání výstupu příkazu se používá opačný apostrof ` ADRESAR=`pwd` POCET=`ls $ADRESAR | wc -l` echo “v adresari $ADRESAR je $POCET souboru“ Přečtení jedné hodnoty = čte řádek ze vstupu, tj. čeká na ENTER echo -n “Zadej sve jmeno: “ read JMENO echo “Tve jmeno je $JMENO“ Příkaz test = [] Příkaz test vyhodnocuje logickou podmínku Podle toho vrátí návratovou hodnotu (0 = true) Zkrácený zápis pomocí závorek [] Pozor na mezery kolem závorek a operátorů!!! test “$1“ == “fivem“ [ “$1“ == “fivem“ ] # stejný zápis Příklad [ -n “$1“ ] || ( echo “První parametr je prazdny“; exit 1 ) if if podminka; then command elif podminka; then command fi Zavolá se příkaz podmínka, rozhoduje se dle návratové hodnoty if [ -f “$1“ ]; then echo “Vypis souboru $1“; cat “$1“ else echo “Soubor neexistuje“ exit 1 fi for for PROM in VSTUP; do echo $PROM done Postupně bere slova za in (odděleno mezerami) a dosazuje to do proměnné PROM for ROK in 2001 2002 2003 2004; do mkdir rok_$ROK done Použití většího interval for ROK in `seq 2001 2020`; do ... cyklus se soubory v adresáři for folder in *.txt; do # komentar if [ ! -f “$folder“ ]; then continue; fi # pauza if [ “$folder“ = “end.txt“ ]; then break; fi echo “je tu soubor $folder“ done while Opakuje cyklus dokud je splněna podmínka, takže volaný příkaz v podmínce má návratovou hodnotu 0 Upřesnění příkazu read Uvedením názvů více proměnný se vstup rozdělí dle mezer Do poslední proměnné se dá zbytek z řádku na vstupu Read vrací 0, když je ještě něco na vstupu, 1 znamená konec while read JMENO PRIJMENI; do echo “jmeno: $JMENO, prijmeni: $PRIJMENI“ done Pozn: musíme ale počítat že jsou na vstupu dodány dva parametry subshell Pomocí kulatých závorek lze spustit subshell a pracovat s jeho vstupem a výstupem. Např. chceme číst řádky ze souboru a s nimi postupně provádět další operace cat /etc/passwd | ( while read -d “:“ UZIV FOO; do echo “uzivatel: $UZIV“ done ) > vystup.txt Parametrem -d změníme oddělování funkce - podprogramy V případě používání funkcí jsou parametry $1, $2 atd. parametry funkce a nikoliv skriptu. Ve funkci se nelze dostat k parametrům scriptu. Ostatní proměnné jsou globální. FIVEM=/fivem start() { tar jcf $FIVEM/$1.tar.bz $2 } start scipts /fivem_scipts start data /fivem_data V příloze jsou uloženy dvě PDF kde jsou podrobnosti bash_script.pdf bash_ocima_bohdana_milara.pdf 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.