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 01:16 | Komunita
Dnes je to přesně 10 let ode dne, kdy vyšla první verze populární distribuce Ubuntu.… více »
tuxmartin | Komentářů: 18
včera 20:50 | Zajímavý projekt

Tomáš Solař, autor české knihy Oracle Database 11g – Hotová řešení, nabízí kontrolu databáze Oracle zdarma. Jedná se o bezplatnou službu, která vám může pomoci odhalit slabé místo vaší databáze, aniž byste za to museli platit. Služba je určená všem, kdo využívají databáze Oracle, ale nikterak se o ně nestarají, přestože v nich uchovávají veškerá firemní data. Více se dočtete přímo na webu dba4refence.

Oracle_DBA | Komentářů: 30
18.10. 02:44 | Komunita
V únoru bylo rozhodnuto, že výchozím init systémem Debianu bude systemd (zprávička). Březnový návrh na hlasování o zachování možnosti volby init systému, tj. o tom, že balíček nemůže záviset na konkrétním init systému neprošel. Včera Ian Jackson návrh zopakoval a hlasovat se tentokrát bude. Lucas Nussbaum, vedoucí projektu Debian, podal alternativní návrh: podpora různých init systémů je žádoucí, ale ne povinná. Řeší se také, zda je na hlasování ta správná doba. Debian Jessie by měl být zmrazen 5. listopadu (zprávička).
Ladislav Hagara | Komentářů: 98
17.10. 11:49 | Nasazení Linuxu
Díky kombinaci Raspberry Pi, miniaturního modulárního fotoaparátu Pi a jednoduchého skriptu v Pythonu můžete snímat proměny krajiny nebo třeba východy či západy slunce.
Tadeáš Pelech | Komentářů: 16
17.10. 10:57 | Zajímavý projekt
Docker a Microsoft vydali oznámení o partnerství. Docker bude rozšířen o Docker Engine for Windows Server, služby Microsoftu budou podporovat Docker API.
Michal Vyskočil | Komentářů: 17
17.10. 01:01 | Zajímavý projekt
V dubnu byla vyhlášena soutěž The Hackaday Prize (zprávička) pro vývojáře open source hardwaru. Z přihlášených více než 800 projektů bylo vybráno 50 semifinalistů a následně 5 finalistů. Vítěz bude vyhlášen v listopadu na veletrhu electronica. Hlavní cenou soutěže je výlet do vesmíru nebo 196 418 dolarů v hotovosti.
Ladislav Hagara | Komentářů: 1
17.10. 01:00 | Komunita
Nadace Raspberry Pi v dubnu představila výpočetní modul Raspberry Pi (Raspberry Pi Compute Module) (zprávička). Tento výpočetní modul (zmenšené Raspberry Pi) lze připojit pomocí slotu SO-DIMM k vlastní desce plošných spojů nebo k oficiální IO desce (Compute Module IO Board). Včera nadace pod licencí BSD zveřejnila veškeré výkresy této oficiální IO desky.
Ladislav Hagara | Komentářů: 0
16.10. 13:07 | Nová verze
Laboratoře CZ.NIC právě vydaly první testovací verzi (0.1.0) desktopové aplikace Datovka, která v budoucnu nahradí stávající Datovku napsanou v jazyce Python. Nová Datovka je napsaná v jazyce C/C++ a používá knihovnu Qt. Aplikace používá jednotné grafické rozhraní pro Windows, Linux a OS X a bude podporovat stejnou funkcionalitu jako stávající Datovka včetně všech používaných metod autentizace. … více »
Vilem Sladek | Komentářů: 37
15.10. 23:16 | IT novinky
Google na svém oficiálním blogu představil Android 5.0 Lollipop (lízátko). Současně představil (YouTube) telefon Nexus 6, tablet Nexus 9 a přehrávač Nexus Player.
Ladislav Hagara | Komentářů: 49
15.10. 16:24 | Bezpečnostní upozornění
Byl publikován útok na nyní už zastaralý protokol SSL verze 3. Útok umožňuje downgradovat spojení na SSLv3 a extrahovat ze spojení data. Autoři popisují konkrétně získání HTTP cookie, náročnost je přibližně 256 requestů na každý byte hodnoty cookie. Útok je účinný, kdykoli obě strany podporují SSLv3 a některá z nich neimplementuje SCSV (TLS Fallback Signaling Cipher Suite Value).
Lyco | Komentářů: 10
Hlasuji z:
 (80%)
 (14%)
 (3%)
 (2%)
 (1%)
 (0%)
Celkem 4473 hlasů
 Komentářů: 50, poslední 12.10. 11:59
Rozcestník
Reklama
Autoškola testy online Levný benzín

BASH - IV

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

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

Komiks xkcd 1085: ContextBot
HW novinky: iPhone 6 Plus má velké problémy
Komiks xkcd 1036: Recenze

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

HW novinky: iPhone 6 Plus má velké problémy
Jaderné noviny – 4. 9. 2014: Systémy souborů v trvalé paměti
HW novinky: DisplayPort Alternate Mode
  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

GNU R prakticky - 2. díl
GNU R prakticky – 1. díl
Paralelizace běžných činností v konzoli pomocí GNU Parallel
Porovnávání obsahu adresářů v GUI
MUNIN, sieťový monitorovací framework
       

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   Powered by Hosting 90 Server hosting
© 1999-2013 Argonit s. r. o. Všechna práva vyhrazena.