abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×

19.5. 00:33 | Zajímavý článek

Správce nástroje curl Daniel Stenberg na GitHubu průběžně vytváří svou novou knihu Uncurled, v níž shrnuje své dlouhodobé zkušenosti s údržbou open-source projektu: od odpozorovaných pouček po vtipné a ne až tak vtipné příklady e-mailů od uživatelů.

Fluttershy, yay! | Komentářů: 10
19.5. 00:22 | Nová verze

Byla vydána nová major verze 25.0 programovacího jazyka Erlang (Wikipedie) a související platformy OTP (Open Telecom Platform, Wikipedie). Přehled novinek v příspěvku na blogu.

Ladislav Hagara | Komentářů: 3
19.5. 00:11 | Nová verze

Deno (Wikipedie), běhové prostředí (runtime) pro JavaScript a TypeScript, bylo vydáno ve verzi 1.22. Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
18.5. 18:22 | Nová verze

Společnost Red Hat oznámila vydání Red Hat Enterprise Linuxu (RHEL) 9.0. Vedle nových vlastností a oprav chyb přináší také aktualizaci ovladačů a předběžné ukázky budoucích technologií. Podrobnosti v poznámkách k vydání.

Ladislav Hagara | Komentářů: 7
18.5. 14:00 | Komunita

Lars Knoll oznámil, že po 25 letech v ekosystému Qt, z toho 22 let pracující pro různé společnosti vlastnící Qt, odchází ze společnosti The Qt Company do malého norského startupu.

Ladislav Hagara | Komentářů: 7
18.5. 13:22 | Zajímavý projekt

Na Kickstarteru běží kampaň na podporu mini ITX desky Turing Pi 2 Cluster Computer. Vložením 4 výpočetních modulů, podporovány jsou Raspberry Pi 4, Turing RK1 a Nvidia Jetson, lze získat 4uzlový cluster. Cena desky je 219 dolarů.

Ladislav Hagara | Komentářů: 2
18.5. 10:00 | Pozvánky

Spolek OpenAlt zve příznivce otevřených řešení a přístupu na 198. brněnský sraz, který proběhne v pátek 20. května tradičně od 18 hodin v Pivovarské restauraci Moravia.

Ladislav Hagara | Komentářů: 2
18.5. 07:00 | Zajímavý software

Byla vydána nová verze 0.25 herního enginu Fyrox, původně rg3d. Přehled novinek s kódy, náhledy i videi v příspěvku na blogu.

Ladislav Hagara | Komentářů: 1
18.5. 00:11 | Nová verze

Multiplatformní audio přehrávač Qmmp (Wikipedie) byl vydán ve verzi 2.1.0. Z novinek lze zmínit například podporu XDG Base Directory Specification.

Ladislav Hagara | Komentářů: 0
17.5. 23:22 | Komunita

Letošní konference LibreOffice proběhne 28. září až 1. října v Bolzanu. The Document Foundation hledá přednášející.

Zdeněk Crhonek | Komentářů: 0
Na sociálních sítích nebo jiných webových diskuzích vystupuji pod
 (60%)
 (16%)
 (25%)
Celkem 292 hlasů
 Komentářů: 26, poslední včera 15:03
Rozcestník


BASH - IV

14. 11. 2003 | Jan Fuchs | Návody | 63354×

V dnešní části seriálu si ukážeme, jak získat hodnoty argumentů předaných skriptu a také použití funkcí a příkazů.

Obsah jednotlivých dílů

  1. Úvod, editace příkazové řádky
  2. Základní příkazy, roury a přesměrování
  3. Proměnné, podmínky a cykly
  4. Funkce a příkazy
  5. Dokumenty here, regulární výrazy
  6. Ladění skriptů, odchytávání signálů a příklady

Informace o názvu skriptu, počtu předaných argumentů a argumenty samotné jsou uloženy ve speciálních proměnných.

  • $0 - název skriptu
  • $# - počet předaných argumentů
  • $IFS - seznam znaků, který je použit k oddělování slov atp., např. když shell čte vstup
  • $1$9 - první až devátý argument předaný skriptu
  • ${n} - libovolný n-tý argument předaný skriptu
  • $* - obsahuje všechny argumenty oddělené prvním znakem z $IFS
  • $@ - jako předchozí, ale k oddělení se nepoužívá první znak z $IFS

Skript argumenty.sh nám poslouží jako ukázka.

#!/bin/bash

echo "Název skriptu: $0"
echo "Počet argumentů: $#"
echo "Všechny argumenty: $@"
echo "První argument: $1"
echo "Desátý argument: ${10}"

exit 0

Nyní skript spustíme s 10 argumenty.

$ ./argumenty.sh jedna dva tři čtyři pět šest sedm osm devět deset
Název skriptu: ./argumenty.sh
Počet argumentů: 10
Všechny argumenty: jedna dva tři čtyři pět šest sedm osm devět deset
První argument: jedna
Desátý argument: deset

Funkce

Provádění funkcí je mnohem rychlejší než provádění skriptů, protože funkce si shell udržuje trvale předzpracované v paměti. Funkce musí být definována dříve než bude použita. Příkaz export lze použít i pro funkce, ale musí být zapnutý mód allexport.

$ set -o allexport
$ prvni_funkce() {
> echo "Jsem první funkce a vypisuji text"
> }
$ export prvni_funkce
$ prvni_funkce
Jsem první funkce a vypisuji text
$ bash
$ prvni_funkce
Jsem první funkce a vypisuji text

Funkcím můžeme předávat argumenty stejně jako skriptům a získáváme je stejným způsobem jako u skriptů. Příkaz return ukončí funkci a vrací její návratovou hodnotu ve formě celočíselného argumentu. Po dokončení funkce jsou poziční argumenty skriptu ($#, $@ ...) obnoveny (u starších shellů to tak být nemusí).

$ funkce_s_argumenty() {
> echo "Počet argumentů: $#"
> echo "Všechny argumenty: $@"
> echo "První argument: $1"
> return 0
> }
$ funkce_s_argumenty první druhý
Počet argumentů: 2
Všechny argumenty: první druhý
První argument: první

Budeme-li chtít vrátit řetězcovou hodnotu, můžeme to udělat např. níže uvedeným způsobem.

#!/bin/bash

vrat_retezec() {
  echo "Řetězec"
}

promena=$(vrat_retezec)
echo $promena

exit 0

Pomocí klíčového slova local můžeme také vytvořit lokální proměnné funkce. Jestliže bude existovat globální proměnná se stejným názvem, bude ve funkci potlačena.

#!/bin/bash

jedna="První globální proměnná"
dva="Druhá globální proměnná"

lokalni_promena() {
  local jedna="První lokální proměnná"

  echo $jedna
  echo $dva
}

lokalni_promena

echo $jedna
echo $dva

exit 0

Příkazy

Příkazy můžeme rozdělit na zabudované a normální. Zabudované příkazy nemůžeme spustit jako externí programy, ale většinou mají své ekvivalenty ve formě externích programů. Normální příkazy jsou externí programy a jejich vykonání je pomalejší než u zabudovaných příkazů.

  • break - vyskočí z cyklu
  • : - nulový příkaz
  • continue - spustí další iteraci cyklu
  • . - provede příkaz v aktuálním shellu
  • eval - vyhodnotí zadaný výraz
  • shift - posune poziční parametry
  • read - načte uživatelský vstup, jako argument se použije název proměnné, do které se má uložit
  • stty - mění a vypisuje charakteristiky terminálové linky
  • exec - spustí nový shell nebo jiný zadaný program a nebo upraví deskriptor souboru
  • exit n - ukončení skriptu s návratovým kódem n (n = 0 - úspěšné ukončení, n = 1 až 125 - chyba, ostatní n jsou rezervovány)
  • printf - není dostupný ve starých shellech a při vytváření formátovaného výstupu byste mu měli dávat přednost před příkazem echo podle specifikace X/Open

Na skriptu prikazy.sh si ukážeme použití některých výše uvedených příkazů.

#!/bin/bash

for i in 10 20 30 40 50; do
  if [ $i -eq 40 ]; then
    break
  elif  [ $i -eq 20 ]; then
    continue
  else
    :
  fi
  echo $i
done

a="abc"
nazev_promene="a"

promena='$'$nazev_promene
echo $promena

eval promena='$'$nazev_promene
echo $promena

while [ "$1" ]; do
  echo $1
  shift
done

exec date

echo "Tato část již nebude provedena!"

exit 0

Nezapomeneme skript spustit s několika argumenty.

$ ./prikazy.sh první druhý třetí
10
30
$a
abc
první
druhý
třetí
St říj 22 16:08:36 CEST 2003

Nyní si ukážeme interaktivní skript read.sh, který požádá uživatele o zadání přihlašovacího jména a hesla. Heslo se nebude vypisovat na obrazovku.

#!/bin/bash

echo -n "Přihlašovací jméno: "
read jmeno

echo -n "Heslo: "

# Vypne výpis vstupních znaků
stty -echo

read heslo

# Zapne výpis vstupních
stty echo
echo

if [ "$jmeno" == "fuky" ] && [ "$heslo" == "heslo" ]; then
  echo "Kód: Příšerně žluťoučký kůň úpěl ďábelské ódy"
else
  echo "Nemáte oprávnění k vypsání kódu"
fi

exit 0

Zadáme-li správné údaje, získáme kód.

$ ./read.sh
Přihlašovací jméno: fuky
Heslo:
Kód: Příšerně žluťoučký kůň úpěl ďábelské ódy

Na závěr tohoto dílu si ukážeme použití konstrukce
select proměnná in hodnota1 ... hodnotaN; do příkazy; done.

#!/bin/bash

echo "Zadejte vaše pohlaví"

select pohlavi in muž žena; do
  if [ "$pohlavi" ]; then
    echo "Jste $pohlavi"
    break
  else
    echo "$REPLY je nedefinovaná odpověď"
  fi
done

exit 0

Po spuštění příkazu select je uživatel vyzván, aby zadal číslo jedné z hodnot (hodnota1 ... hodnotaN v našem případě muž nebo žena). proměnná $REPLY obsahuje vždy hodnotu uživatelského vstupu. proměnná $pohlavi obsahuje hodnotu pouze v případě, že číslo odpovídá jedné z voleb. Dotaz se opakuje, dokud se neprovede v těle příkaz break.

$ ./select.sh
Zadejte vaše pohlaví
1) muž
2) žena
#? 3
3 je nedefinovaná odpověď
1) muž
2) žena
#? 1
Jste muž

Nejčtenější články posledního měsíce

Týden na ITBiz: Překvapení – dodavatele čipů má čekat sestupná fáze ekonomického cyklu
Týden na ITBiz: Excitony mohou proudit materiálem i při pokojové teplotě
Týden na ScienceMag.cz: Světlo umožňuje manipulovat s excitony i magnetismem

Nejkomentovanější články posledního měsíce

Jaderné noviny – přehled za duben 2022
  všechny statistiky »

Seriál BASH (dílů: 6)

BASH - I (první díl)
<—« BASH - III
»—> BASH - V
BASH - VI (poslední díl)

Související články

BASH - I (Úvod, editace příkazové řádky)
BASH - II (Základní příkazy, roury a přesměrování)
BASH - III (Proměnné, podmínky a cykly)
BASH - V (Dokumenty here, regulární výrazy)
BASH - VI (Ladění skriptů, odchytávání signálů a příklady)

Odkazy a zdroje

BASH - GNU Project

Další články z této rubriky

VDR a DVB-T2, část 2.
VDR a DVB-T2, část 1.
Šifrovaný Proxmox VE 6: ZFS, LUKS, systemd_boot a Dropbear
MapTiler – proměňte obrázek v zoomovatelnou mapu
Syncthing
       

Hodnocení: 39 %

        špatnédobré        

Nástroje: Tisk bez diskuse

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Vložit další komentář

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.