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í
×
dnes 02:00 | Zajímavý článek

Společnost Backblaze zveřejnila statistiky spolehlivosti pevných disků používaných ve svých datových centrech za rok 2018. Ke konci roku vlastnila 106 919 pevných disků. Průměrná AFR (Annualized Failure Rate), tj. pravděpodobnost, že disk během roku selže, klesla na 1,25 %. V roce 2017 to bylo 1,77 %. V roce 2016 1,95 %.

Ladislav Hagara | Komentářů: 0
včera 23:00 | Nová verze

Byl vydán Debian 9.7, tj. sedmá opravná verze Debianu 9 s kódovým názvem Stretch. Opravena je bezpečnostní chyba CVE-2019-3462 v APT. Předchozí instalační média Debianu 9 Stretch lze samozřejmě nadále k instalaci používat. Po instalaci stačí APT a následně celý systém aktualizovat.

Ladislav Hagara | Komentářů: 0
včera 22:55 | Pozvánky

V úterý 29. ledna v 19:00 se v Brně koná sedmý přednáškový večer o vývoji v Ruby. Těšit se můžete na témata od vývojářů z Red Hatu a PrimeHammeru. Na místě bude lehké občerstvení; vstup zdarma pro registrované. Více informací na Facebooku nebo se rovnou registrujte na Meetup.

dejvik | Komentářů: 0
včera 22:44 | Pozvánky

Lednový sraz spolku OpenAlt se koná v pátek 25. 1. 2019 v Pivovarském klubu od 18:00. Najdete jej kousek od metra Florenc na adrese Křižíkova 17°, Praha 8. Sejdeme se zase u dobrého piva a popovídáme si o tématech jako umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.

xkucf03 | Komentářů: 0
včera 17:00 | Komunita

Do pátku 25. ledna probíhá na Novém Zélandu konference linux.conf.au 2019 aneb LCA 2019. Na programu je řada zajímavých přednášek. Jejich záznamy a také online přenos na YouTube.

Ladislav Hagara | Komentářů: 0
včera 16:22 | Nová verze

Byl vydán Cool-Retro-Term ve verzi 1.1.1. Jedná se o emulátor terminálu, který napodobuje vzhled a chování starých CRT terminálů. Ukázka vlastností a nastavení předchozí verze na YouTube. Cool-Retro-Term je nově k dispozici také jako balíček ve formátu AppImage. Stačí je stáhnout, nastavit právo ke spuštění a spustit.

Ladislav Hagara | Komentářů: 0
včera 12:11 | IT novinky

Web gHacks upozorňuje na draft nové specifikace rozhraní pro rozšíření webového prohlížeče Google Chrome. Pozoruhodný je plán odstranit část API webRequest pro blokování – což by omezilo doplňky jako uBlock Origin určený pro blokování obsahu včetně reklam. Nadále by byl použitelný doplněk Adblock Plus, který provozuje whitelist reklam mj. právě Google.

Fluttershy, yay! | Komentářů: 3
včera 00:33 | Zajímavý projekt

Byl spuštěn Humble Caffeine Bundle. V balíčku počítačových her jsou také hry běžící na Linuxu: GoNNER BLüEBERRY EDiTION, This War of Mine, Ken Follett's The Pillars of the Earth, Tyranny a Shadow Tactics: Blades of the Shogun.

Ladislav Hagara | Komentářů: 1
včera 00:11 | Nová verze

Po roce vývoje od vydání verze 3.0 a více než 6 000 změnách byla vydána nová stabilní verze 4.0 softwaru, který vytváří aplikační rozhraní umožňující chod aplikací pro Microsoft Windows také pod GNU/Linuxem, Wine (Wikipedie). Z novinek lze zdůraznit například podporu Vulkanu nebo Direct3D 12. Podrobnosti v poznámkách k vydání.

Ladislav Hagara | Komentářů: 8
22.1. 20:44 | Nová verze

Byla vydána verze 11.7 open source alternativy GitHubu, tj. softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech, GitLab (Wikipedie). Představení nových vlastností i s náhledy v příspěvku na blogu.

Ladislav Hagara | Komentářů: 5
Používáte USB Type-C?
 (20%)
 (16%)
 (11%)
 (12%)
 (38%)
 (4%)
 (44%)
Celkem 484 hlasů
 Komentářů: 0
Rozcestník

BASH - IV

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

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

Windows 10 za €9,46, Office 2016 Pro za €21,43 – poslední promoakce 2018, získejte až 20% extra slevu!
Titul MBA se hodí vývojářům i správcům sítí
Jaderné noviny – přehled za prosinec 2018

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

  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

MapTiler – proměňte obrázek v zoomovatelnou mapu
Syncthing
Twibright Registrator: Instalace, odinstalace, test, základní použití
Twibright Registrator: fotografie v šeru bez stativu 2
Twibright Registrator: fotografie v šeru bez stativu 1
       

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.