pátek 7. listopadu 2014

Nakup

http://www.abclinuxu.cz/clanky/navody/bash-v

    cp - kopíruje soubory
    rm - ruší soubory
    tee - přesměruje výstup zároveň do souborů tee [options(-a append) ]... [file(s)]...
    mkdir - vytváří adresáře
    rmdir - ruší prázdné adresáře
    ln - vytvoří odkazy na soubory
    chmod - změní přístupová práva k souborům
    ls, dir, vdir - vypíše obsah adresářů
    find - vyhledávání souborů
    which - zobrazí absolutní cestu k programu
    df - vypisuje informace o připojených FS
    ps - informace o spuštěných procesech
    cat, less - výpis souboru na obrazovku
    xargs - spustí zadaný příkaz a zbylé argumenty čte ze standardního vstupu
    grep - tiskne řádky, které odpovídají zadanému vzoru
    wc - vypíše počet písmen, slov a řádků
    sort - setřídí řádky
grep, egrep, sed, ed, ex, awk.


    $$ - PID shellu
    $! - PID posledního procesu, který byl spuštěn na pozadí
    $? - návratová hodnota posledního dokončeného procesu.


    $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 až $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


# Vypíše délku $ctvrta
echo ${#ctvrta}

# Od konce odstraní nejkraší část $ctvrta, která odpovídá e*
echo ${ctvrta%e*}

# Od konce odstraní nejdelší část $ctvrta, která odpovídá e*
echo ${ctvrta%%e*}

# Od začátku odstraní nejkraší část $ctvrta, která odpovídá *e
echo ${ctvrta#*e}

# Od začátku odstraní nejdelší část $ctvrta, která odpovídá e*
echo ${ctvrta##*e}

$ echo $promenna
./promenne.sh ./prvni.sh
$ echo '$promenna'
$promenna
$ echo "${promenna}vni.sh"
./*vni.sh
$ echo ${promenna}vni.sh
./prvni.sh
$ echo ${promenna}vni.pdf
./*vni.pdf
$ echo "$(echo $promenna) - výpis adresáře"
./promenne.sh ./prvni.sh - výpis adresáře



    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


-------------------------------------------------------PODMíNKY--------------------------------------------------

if [ "$USER" == "root" ]; then
  echo "Ahoj admine";
elif [ "$USER" == "fuky" ]; then
  echo "Ahoj Honzíku";
else
  echo "Ahoj uživateli";
fi



    [ výraz ] - délka řetězce je nenulová
    [ -z výraz ] - délka řetězce je nulová
    [ výraz1 == výraz2 ] - řetězce jsou shodné
    [ výraz1 != výraz2 ] - řetězce jsou různé
    [ výraz1 -eq výraz2 ] - čísla jsou shodná
    [ výraz1 -le výraz2 ] - výraz1 <= výraz2
    [ výraz1 -lt výraz2 ] - výraz1 < výraz2
    [ výraz1 -ge výraz2 ] - výraz1 >= výraz2
    [ výraz1 -gt výraz2 ] - výraz1 > výraz2
    [ výraz1 -ne výraz2 ] - čísla jsou různé


Testování souborů.

    [ výraz1 -ef výraz2 ] - soubory sdílejí stejný i-uzel
    [ výraz1 -nt výraz2 ] - první soubor je novější
    [ výraz1 -no výraz2 ] - první soubor je starší
    [ -e výraz ] - soubor existuje
    [ -d výraz ] - soubor je adresář
    [ -f výraz ] - soubor je obyčejný soubor
    [ -L výraz ] - soubor je symbolický odkaz
    [ -w výraz ] - soubor je zapisovatelný
    [ -x výraz ] - soubor je spustitelný


&& (a zároveň platí) a || (nebo platí).

----------------------------------------------------------REGULÁRNÍ VÝRAZY----------------------------------------


    . - jakýkoliv znak (mimo znaku nového řádku)
    * - libovolný počet (i nulový) opakování předchozího znaku (lze použít i regulární výraz)
    ^ - následující výraz musí odpovídat začátku řádku
    $ - předchozí výraz musí odpovídat konci řádku
    \ - vypíná speciální význam následujícího znaku
    [] - jakýkoliv znak uvedený v hranatých závorkách, speciální znaky zde mají normální význam, mimo - tu lze použít pro zápis intervalů (a-z atd.) a znak ^ uvedený jako první způsobí negaci (tj. jakýkoliv znak neuvedený v ...)


Níže uvedené speciální znaky patří do novější notace a chceme-li je použít ve filtru grep, musíme před ně zapsat znak \.
    + - jeden a více výskytů předchozího výrazu.
    ? - jeden nebo žádný výskyt předchozího výrazu.
    | - předcházející nebo následující výraz.
    () - text odpovídající výrazu mezi závorkami se uloží do paměti a lze ho použít pomocí \1 až \9, čísluje se od vnějších závorek směrem dovnitř (např. ((abc)linuxu) \1 = "abclinuxu") a \2 = "abc". Nebo lze použít závorky k definování priority vyhodnocení.
    {n,m} - interval opakování předchozího výrazu, {n} - opakuje se n-krát, {n,} n-krát a více, {n,m} n-krát až m-krát


$ cat << END > ./retezce.txt
> abclinuxu
> alfa
> aaa
> abcabcabc
> znak $
> a1a
> aAa
> END
$ cat ./retezce.txt | grep '.*'
abclinuxu
alfa
aaa
abcabcabc
znak $
a1a
aAa
$ cat ./retezce.txt | grep '.* \$'
znak $
$ cat ./retezce.txt | grep '^a[a-z]*a$'
alfa
aaa
$ cat ./retezce.txt | grep '^a[a-z0-9]*a$'
alfa
aaa
a1a


------------------------------------------------------METAZNAKY-------------------------------------------

    * - libovolný řetězec (může být i nulové délky)
    ? - libovolný jeden znak
    ~ - domovský adresář ($HOME)
    ~UJ - domovský adresář uživatele UJ
    ~+ - aktuální pracovní adresář ($PWD)
    ~- - předchozí pracovní adresář ($OLDPWD)
    [abc...] - jakýkoliv znak uvedený v [], lze použít - k zápisu intervalu znaků např a-z, 0-9
    [!abc...] - opak předchozího (tj. jakýkoliv znak mimo uvedených znaků v [])






----------------------------------------------------LOOPS---------------------------------------------------------

#!/bin/bash
--------------FOR

# Vypíše všechny soubory v adresáři s příponou sh
for file in *.sh; do
  # Soubor je samozřejmě i adresář a co když nějaký šílenec
  # pojmenuje adresář jmeno_adresare.sh
  if [ -f "$file" ]; then
    echo $file
  fi
done

# Do $cislo bude postupně dosazovat čísla
for cislo in 10 20 30 40 50 60 70 80 90 100; do
  echo $cislo
done


-----------------------------WHILE
cislo=0
# Podmínka je splněna jestliže $cislo != 100
while [ "$cislo" -ne 100 ]; do
  # Konstrukci $(()) zavedl shell ksh a je rychlejší a méně
  # náročná na systémové zdroje než příkaz expr
  cislo=$((cislo + 10))
  echo $cislo
done


----------------------------------------------UNTIL
cislo=0
# Cyklus pokračuje dokud není splněna podmínka
until [ "$cislo" -eq 100 ]; do
  cislo=$((cislo + 10))
  echo $cislo
done

exit 0

-----------------------------------------------------------------------ARCHIVACE-------------------------------------

Příklad použití archivačního programu tar (je to standardní nástroj, takže ho naleznete snad v každé distribuci).
$ tar zcvf archiv.tgz ./adresar
./adresar/
./adresar/obesenec.sh
./adresar/oggwavmp3.sh
./adresar/archmed.sh
$ tar zxf archiv.tgz
$ tar jcf archiv.tar.bz2 ./adresar
$ tar jxf archiv.tar.bz2

Mimo archivace tar použije i kompresi z - gzip, j - bzip2. Volba x - rozbalí archív, c - vytvoří archív, v - vypisuje informace.
--------------------------------------------------------------PROUDY----------------------------------------------

Sed

Syntaxe příkazu:

Začátek,Konec!InstrukceArgumenty

    Začátek - číslo řádku ($ značí poslední řádek) nebo /regulární výraz/
    Konec - číslo řádku nebo /regulární výraz/
    ! - neguje předchozí body
    Instrukce - mají jedno písmeno
    Argumenty - k některým instrukcím

Není-li uveden Začátek a Konec, aplikuje se instrukce na každý vstupní řádek. Je-li uveden pouze Začátek, aplikuje se instrukce pouze na odpovídající řádek (či řádky) a je-li uvedeno obojí, tak od řádku odpovídajícímu Začátek se budou aplikovat instrukce a od řádku odpovídajícímu Konec se aplikovat přestanou. Níže jsou uvedeny některé Instrukce a jejich Argumenty.

    s/vzorek/náhrada/příznaky - nahradí první nalezený vzorek náhradou. Příznaky: n - nahradí n-tý výskyt vzorku (1 až 512), g - nahradí všechny výskyty vzorku.
    w soubor - do souboru uloží vstupní řádek (řádky)
    r soubor - soubor načte do vstupu
    p - vypíše vstupní řádek na výstup
    n - přesune se na další vstupní řádek
    d - vstupní řádek je smazán
    y/původní znaky/nové znaky/ - přeloží znaky (man tr)
    : - označí řádek skriptu pro odskok Instrukcí t nebo b
    t - byla-li provedena substituce, skočí na následující značku :, není-li uvedena, skočí na konec skriptu
    {} - zajistí aplikaci více příkazů na jednu adresu


$ cat ./retezce.txt | sed '2,$s/a/?/g'
abclinuxu
?lf?
???
?bc?bc?bc
zn?k $
?1?
?A?
$ cat ./retezce.txt | sed -n '2p'
alfa
$ cat ./retezce.txt | sed -n '1{
> n
> p
> }'
alfa
$ cat ./retezce.txt | sed '2p
> d'
alfa
$ cat ./retezce.txt | sed '4y/a/?/
> 4!d'
?bc?bc?bc



------------------------------------------------------------------------------------------------------------

$ find . \! -path './md5sum.txt' -type f | xargs -i md5sum {} > md5sum.txt

Program find předá programu xargs cestu ke všem souborům (na každém řádku je cesta k jednomu souboru), ten vezme řádek,
dá ho do uvozovek a předá jako argument programu md5sum, načte další řádek... Dokud nezpracuje celý vstup.
Standardní výstup programu md5sum se přesměruje do souboru md5sum.txt.

find

    \! - neguje následující podmínku
    -path './md5sum.txt' - najde soubory, jejichž jména odpovídají './md5sum.txt'
    -type f - jsou nalezeny běžné soubory

xargs

    -i - všechny výskyty dvojice znaků {} jsou nahrazeny cestou k souboru ze standardního vstupu,
mezery neuzavřené v uvozovkách nejsou považovány za ukončení argumentu

Je zbytečné psát takhle dlouhý příkaz, když ho budeme často používat. Proto si do souboru ~/.bashrc přídáme alias.
alias md5sumr='find . \! -path './md5sum.txt' -type f | xargs -i md5sum {} > md5sum.txt'

Po dalším spustění BASHE stačí, když zadáte jen md5sumr.

echo -n "Heslo: "

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

read heslo

# Zapne výpis vstupních
stty echo
echo

Jedno reseni

#!/bin/bash

    #############################################
# jedno z moznych reseni prikladu k opakovani #
#                                             #
###############################################


while [ $# -ge 1 ]
do
case $1 in
-a)    cat /etc/passwd | tail -2 | head -1 > $2
    shift ; shift
    ;;
-b)    ln -s $2 $3
    shift ; shift ; shift
    ;;
-c)    cislo=100
    while [ $cislo -ge 1 ]
    do
        echo $cislo >> cisla.txt
        cislo=$[$cislo-1]
    done
    shift
    ;;
-d)    tar cjf $2 $3
        shift ; shift ; shift
    ;;
-e)    cat $2 | tr '[A-Z]' '[a-z]' > $3
    shift ; shift ; shift
    ;;
-f)    diff $2 $3 > $4
    shift ; shift ; shift ; shift
    ;;
-g)    man $2 > $3.man
    shift ; shift ; shift
    ;;   
-h)    cat | tee $2 > $3
    shift ; shift ; shift
    ;;
   
-i)    cat /proc/cpuinfo
    shift
    ;;
-i2)    uptime
    shift
    ;;
-j)    echo ":-)"
    shift
    ;;
-k)    ls -dl *a*a*
    shift
    ;;
-l)    cat $2 | head -1 | mail pesicka@kiv.zcu.cz -s skript
    cat $2 | tail -n +2 > pom.pom
    cp pom.pom $2
    shift ; shift
    ;;
   
esac
done

bash

MOJE RESENI

#!/bin/bash

while [ $# -ge 1 ]
do

case $1 in

#vytvori soubor dle nazvu f1 a ulozi do nejpredposledni radku z /etc/passwd,dale do souboru zapise: Pocet radek: a pocetradek /etc/passwd
-a)    cat /etc/passwd | tail -2 > $2
    echo "Pocet radek: " >> $2
    wc -l < /etc/passwd >> $2
    shift ; shift
    ;;

#symbolicky link na soubor dany parametrem f1 nazvany     dle parametru f2
-b)    ln -s $2 $3
    shift ; shift; shift
    ;;

#vytvori soubor cisla.txt obsahujici na kazde radce sestupne cisla 100,99,98 az 1
-c)    cislo=100
    while [ "$cislo" -ge 1 ]; do
        echo $cislo >> cisla.txt
        cislo=$((cislo - 1))
    done
    shift;
    ;;

-d)    string="Hello World"
    $ echo ${string,,} > $2 #to lower case
    shift ; shift
    ;;
#prevede textovy soubor dany f1 na soubor f2 obsahujici jen velka pismena
-e)    cat $2 |tr '[a-z]' '[A-Z]' >$3 
    shift ; shift; shift
    ;;
#zjisti rozdil mezi dvema soubory a zapise do tretiho souboru
-f)    diff $2 $3 > $4
    shift ; shift ; shift ; shift
    ;;

#tee kopiruje vystup do vice outputu {standard output a pak vsechny soubory dane jako parametry}
-h)    cat | tee $2 > $3
    shift ; shift ; shift
    ;;

#vytvori archiv komprimovany bzip2 a nazvany dle parametru
-i)    tar -cjvf $2 ./UUR/*
    shift; shift;
    ;;

#ulozi manualovou stranku k prikazu f1  do souboru daneho parametrem f2 a navic jeste prida priponu .man
-j)    man $2 > $3.man
    shift ; shift ; shift
    ;;

# bude ukladat vstup z klavesnice do souboru f1 a zaroven f2 (nikoliv prikazem cp), ukonceni vstupu je pres Ctrl+D
-k)    cat | tee $2 > $3
    shift ; shift ; shift
    ;;
#vypise na obrazovku vsechny soubory/adresare z aktualniho adresare, ktere maji v nazvu minimalne dva znaky a (nemusi byt za sebou)
-l)    ls -dl *a*a*
    shift
    ;;
#z textoveho souboru daneho parametrem f1 odebere prvni radek (resp. vysledkem bude soubor dany f1, z ktereho zmizi prvni radek)
# tento prvni radek odeslete e-mailem na svoji adresu
#http://en.kioskea.net/faq/1451-sed-delete-one-or-more-lines-from-a-file
-m)    cat $2 | head -1 | mail terezahrc@gmail.com -s skript
    cat $2 | sed '1d'|cat | tee $2
    shift ; shift
    ;;



esac
done

NAKUP
http://www.abclinuxu.cz/clanky/navody/bash-v

    cp - kopíruje soubory
    rm - ruší soubory
    tee - přesměruje výstup zároveň do souborů tee [options(-a append) ]... [file(s)]...
    mkdir - vytváří adresáře
    rmdir - ruší prázdné adresáře
    ln - vytvoří odkazy na soubory
    chmod - změní přístupová práva k souborům
    ls, dir, vdir - vypíše obsah adresářů
    find - vyhledávání souborů
    which - zobrazí absolutní cestu k programu
    df - vypisuje informace o připojených FS
    ps - informace o spuštěných procesech
    cat, less - výpis souboru na obrazovku
    xargs - spustí zadaný příkaz a zbylé argumenty čte ze standardního vstupu
    grep - tiskne řádky, které odpovídají zadanému vzoru
    wc - vypíše počet písmen, slov a řádků
    sort - setřídí řádky
grep, egrep, sed, ed, ex, awk.


    $$ - PID shellu
    $! - PID posledního procesu, který byl spuštěn na pozadí
    $? - návratová hodnota posledního dokončeného procesu.


    $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 až $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


# Vypíše délku $ctvrta
echo ${#ctvrta}

# Od konce odstraní nejkraší část $ctvrta, která odpovídá e*
echo ${ctvrta%e*}

# Od konce odstraní nejdelší část $ctvrta, která odpovídá e*
echo ${ctvrta%%e*}

# Od začátku odstraní nejkraší část $ctvrta, která odpovídá *e
echo ${ctvrta#*e}

# Od začátku odstraní nejdelší část $ctvrta, která odpovídá e*
echo ${ctvrta##*e}

$ echo $promenna
./promenne.sh ./prvni.sh
$ echo '$promenna'
$promenna
$ echo "${promenna}vni.sh"
./*vni.sh
$ echo ${promenna}vni.sh
./prvni.sh
$ echo ${promenna}vni.pdf
./*vni.pdf
$ echo "$(echo $promenna) - výpis adresáře"
./promenne.sh ./prvni.sh - výpis adresáře



    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


-------------------------------------------------------PODMíNKY--------------------------------------------------

if [ "$USER" == "root" ]; then
  echo "Ahoj admine";
elif [ "$USER" == "fuky" ]; then
  echo "Ahoj Honzíku";
else
  echo "Ahoj uživateli";
fi



    [ výraz ] - délka řetězce je nenulová
    [ -z výraz ] - délka řetězce je nulová
    [ výraz1 == výraz2 ] - řetězce jsou shodné
    [ výraz1 != výraz2 ] - řetězce jsou různé
    [ výraz1 -eq výraz2 ] - čísla jsou shodná
    [ výraz1 -le výraz2 ] - výraz1 <= výraz2
    [ výraz1 -lt výraz2 ] - výraz1 < výraz2
    [ výraz1 -ge výraz2 ] - výraz1 >= výraz2
    [ výraz1 -gt výraz2 ] - výraz1 > výraz2
    [ výraz1 -ne výraz2 ] - čísla jsou různé


Testování souborů.

    [ výraz1 -ef výraz2 ] - soubory sdílejí stejný i-uzel
    [ výraz1 -nt výraz2 ] - první soubor je novější
    [ výraz1 -no výraz2 ] - první soubor je starší
    [ -e výraz ] - soubor existuje
    [ -d výraz ] - soubor je adresář
    [ -f výraz ] - soubor je obyčejný soubor
    [ -L výraz ] - soubor je symbolický odkaz
    [ -w výraz ] - soubor je zapisovatelný
    [ -x výraz ] - soubor je spustitelný


&& (a zároveň platí) a || (nebo platí).

----------------------------------------------------------REGULÁRNÍ VÝRAZY----------------------------------------


    . - jakýkoliv znak (mimo znaku nového řádku)
    * - libovolný počet (i nulový) opakování předchozího znaku (lze použít i regulární výraz)
    ^ - následující výraz musí odpovídat začátku řádku
    $ - předchozí výraz musí odpovídat konci řádku
    \ - vypíná speciální význam následujícího znaku
    [] - jakýkoliv znak uvedený v hranatých závorkách, speciální znaky zde mají normální význam, mimo - tu lze použít pro zápis intervalů (a-z atd.) a znak ^ uvedený jako první způsobí negaci (tj. jakýkoliv znak neuvedený v ...)


Níže uvedené speciální znaky patří do novější notace a chceme-li je použít ve filtru grep, musíme před ně zapsat znak \.
    + - jeden a více výskytů předchozího výrazu.
    ? - jeden nebo žádný výskyt předchozího výrazu.
    | - předcházející nebo následující výraz.
    () - text odpovídající výrazu mezi závorkami se uloží do paměti a lze ho použít pomocí \1 až \9, čísluje se od vnějších závorek směrem dovnitř (např. ((abc)linuxu) \1 = "abclinuxu") a \2 = "abc". Nebo lze použít závorky k definování priority vyhodnocení.
    {n,m} - interval opakování předchozího výrazu, {n} - opakuje se n-krát, {n,} n-krát a více, {n,m} n-krát až m-krát


$ cat << END > ./retezce.txt
> abclinuxu
> alfa
> aaa
> abcabcabc
> znak $
> a1a
> aAa
> END
$ cat ./retezce.txt | grep '.*'
abclinuxu
alfa
aaa
abcabcabc
znak $
a1a
aAa
$ cat ./retezce.txt | grep '.* \$'
znak $
$ cat ./retezce.txt | grep '^a[a-z]*a$'
alfa
aaa
$ cat ./retezce.txt | grep '^a[a-z0-9]*a$'
alfa
aaa
a1a


------------------------------------------------------METAZNAKY-------------------------------------------

    * - libovolný řetězec (může být i nulové délky)
    ? - libovolný jeden znak
    ~ - domovský adresář ($HOME)
    ~UJ - domovský adresář uživatele UJ
    ~+ - aktuální pracovní adresář ($PWD)
    ~- - předchozí pracovní adresář ($OLDPWD)
    [abc...] - jakýkoliv znak uvedený v [], lze použít - k zápisu intervalu znaků např a-z, 0-9
    [!abc...] - opak předchozího (tj. jakýkoliv znak mimo uvedených znaků v [])






----------------------------------------------------LOOPS---------------------------------------------------------

#!/bin/bash
--------------FOR

# Vypíše všechny soubory v adresáři s příponou sh
for file in *.sh; do
  # Soubor je samozřejmě i adresář a co když nějaký šílenec
  # pojmenuje adresář jmeno_adresare.sh
  if [ -f "$file" ]; then
    echo $file
  fi
done

# Do $cislo bude postupně dosazovat čísla
for cislo in 10 20 30 40 50 60 70 80 90 100; do
  echo $cislo
done


-----------------------------WHILE
cislo=0
# Podmínka je splněna jestliže $cislo != 100
while [ "$cislo" -ne 100 ]; do
  # Konstrukci $(()) zavedl shell ksh a je rychlejší a méně
  # náročná na systémové zdroje než příkaz expr
  cislo=$((cislo + 10))
  echo $cislo
done


----------------------------------------------UNTIL
cislo=0
# Cyklus pokračuje dokud není splněna podmínka
until [ "$cislo" -eq 100 ]; do
  cislo=$((cislo + 10))
  echo $cislo
done

exit 0

-----------------------------------------------------------------------ARCHIVACE-------------------------------------

Příklad použití archivačního programu tar (je to standardní nástroj, takže ho naleznete snad v každé distribuci).
$ tar zcvf archiv.tgz ./adresar
./adresar/
./adresar/obesenec.sh
./adresar/oggwavmp3.sh
./adresar/archmed.sh
$ tar zxf archiv.tgz
$ tar jcf archiv.tar.bz2 ./adresar
$ tar jxf archiv.tar.bz2

Mimo archivace tar použije i kompresi z - gzip, j - bzip2. Volba x - rozbalí archív, c - vytvoří archív, v - vypisuje informace.
--------------------------------------------------------------PROUDY----------------------------------------------

Sed

Syntaxe příkazu:

Začátek,Konec!InstrukceArgumenty

    Začátek - číslo řádku ($ značí poslední řádek) nebo /regulární výraz/
    Konec - číslo řádku nebo /regulární výraz/
    ! - neguje předchozí body
    Instrukce - mají jedno písmeno
    Argumenty - k některým instrukcím

Není-li uveden Začátek a Konec, aplikuje se instrukce na každý vstupní řádek. Je-li uveden pouze Začátek, aplikuje se instrukce pouze na odpovídající řádek (či řádky) a je-li uvedeno obojí, tak od řádku odpovídajícímu Začátek se budou aplikovat instrukce a od řádku odpovídajícímu Konec se aplikovat přestanou. Níže jsou uvedeny některé Instrukce a jejich Argumenty.

    s/vzorek/náhrada/příznaky - nahradí první nalezený vzorek náhradou. Příznaky: n - nahradí n-tý výskyt vzorku (1 až 512), g - nahradí všechny výskyty vzorku.
    w soubor - do souboru uloží vstupní řádek (řádky)
    r soubor - soubor načte do vstupu
    p - vypíše vstupní řádek na výstup
    n - přesune se na další vstupní řádek
    d - vstupní řádek je smazán
    y/původní znaky/nové znaky/ - přeloží znaky (man tr)
    : - označí řádek skriptu pro odskok Instrukcí t nebo b
    t - byla-li provedena substituce, skočí na následující značku :, není-li uvedena, skočí na konec skriptu
    {} - zajistí aplikaci více příkazů na jednu adresu


$ cat ./retezce.txt | sed '2,$s/a/?/g'
abclinuxu
?lf?
???
?bc?bc?bc
zn?k $
?1?
?A?
$ cat ./retezce.txt | sed -n '2p'
alfa
$ cat ./retezce.txt | sed -n '1{
> n
> p
> }'
alfa
$ cat ./retezce.txt | sed '2p
> d'
alfa
$ cat ./retezce.txt | sed '4y/a/?/
> 4!d'
?bc?bc?bc



------------------------------------------------------------------------------------------------------------

$ find . \! -path './md5sum.txt' -type f | xargs -i md5sum {} > md5sum.txt

Program find předá programu xargs cestu ke všem souborům (na každém řádku je cesta k jednomu souboru), ten vezme řádek,
dá ho do uvozovek a předá jako argument programu md5sum, načte další řádek... Dokud nezpracuje celý vstup.
Standardní výstup programu md5sum se přesměruje do souboru md5sum.txt.

find

    \! - neguje následující podmínku
    -path './md5sum.txt' - najde soubory, jejichž jména odpovídají './md5sum.txt'
    -type f - jsou nalezeny běžné soubory

xargs

    -i - všechny výskyty dvojice znaků {} jsou nahrazeny cestou k souboru ze standardního vstupu,
mezery neuzavřené v uvozovkách nejsou považovány za ukončení argumentu

Je zbytečné psát takhle dlouhý příkaz, když ho budeme často používat. Proto si do souboru ~/.bashrc přídáme alias.
alias md5sumr='find . \! -path './md5sum.txt' -type f | xargs -i md5sum {} > md5sum.txt'

Po dalším spustění BASHE stačí, když zadáte jen md5sumr.

echo -n "Heslo: "

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

read heslo

# Zapne výpis vstupních
stty echo
echo

úterý 7. června 2011

Arrival to Lucknow

We have left Hyderabad in order to exchange our non productive management traineeship for a socially beneficial one. We were about to teach children English and French and later on go to nearby villages and teach about personal hygiene. We were looking forward being useful again and maybe even getting better care from the local AIESEC comitee.

The arrival seemed promising. There were two AIESEC people waiting for us at the railway station (and they were waiting for quite some time since our train was delayed by 2 hours on a 5 hour journey). They took us to the intern’s apartment. Our room was wonderful. Nice double bed, big wardrobes, even a private bathroom and a small balcony. And air conditioning! (Well, we have to pay some extra money for that, but still :-) Besides our room there is one more with two people occupying it, a shared bathroom, kitchen and living room.



Kitchen with the usual disorder


Living room - already with a bed of Annas who arrived a week ago from Tunisia

Our room

Great apartment, isn’t it? The only problem is, they want to put in here 3 more people! One more will stay in the other room, but the 2 guys are supposed to be in the shared living room. But the AISECErs wouldn’t see where the problem is when we started complaining... At least me and Petr we can be happy for our comfort will remain almost untouched but I really feel for those in the living room.

We face the same problem as in Hyderabad – we keep getting incorrect information. And when we insist on keeping the promises the only response we usually get is something like “sorry there was a misunderstanding” or “sorry the situation has changed”. For example we have explicitly asked about the work – if there are any teaching materials prepared or if we have to do our preparations ourselves – we were assured there was no need to prepare anything. When we came, nothing was there.

Anyway we have come to see, that the local AIESECers do care more than those in Hyderabad (they come to see us, we have already visited some of them, etc.) but when there is a real problem to solve there is not much action. At least they are friendly and take care about our leisure time activities (which is far better than Hyderabad).

neděle 29. května 2011

Mathura

Last on our list of Agra touristic sights was the legendary birth place of Krishna. Krishna’s parents were imprisoned in Mathura by Kansa, brother of Krishna’s mother. Kansa knew, that his sister Dévakí will have a son which will later kill him. To avoid his fate he wanted to murder all the sons of his sister. But in the moment Krishna was born the gates of the prison opend miraculously and the guards fell asleep. Thanks to that Krisna’s parents could take him to a safe place. According to some legends they sent Krishna in a basket down the river Yamune, according to others they took him to his father’s cousin.

There is a big temple complex in the place of Krishna’s birth. Besides the temple, there are stands with souvenirs and refreshment, artificial cave and a „legend hall“ with moving pupets picturing stories from Krishna’s life. A bit of kitsch in the European eyes but that is how the Indians like it – shiny and colourful. To sum up there was not much to admire in the aesthetic terms but we enjoyed the energy of the place. You could really feel the power flowing in there.

For the lunch we went out to search for a restaurant. It wasn’t that easy. In the first one they refused to serve us anything and we still wonder whether it was because they did not like us or because they did not undestand us. We were more lucky in the second one. We got rid of the hunger but we still had one problem to cope with: we knew there was a nice place we would like to see but we had no idea how it was called.

Asking people did not help much since they either did not undestand English at all or they wouldn’t see what we mean when we ask about „something nice or interesting“ in Mathura. Finally we got some rough tips by a security guy at the temple complex.


Before getting the rickshaw we have found this place... Can you imagine the purpose of it?

Do not look for the parrots in cages :-)


Cyclorickshaws were trying to cheat us as ever – yes, for 400 Rs, I will take you! Oh, really? Do you think we do not know anything about the real prices? Finally we agreed on 100 Rs for about 10 km tour. Soon we were to regret. The rickshaw took as on the worst road ever. Stones and holes were so bad he even had to get down and push the rickshaw with us. When at the museum he asked for extra money for waiting time we got really angry and wanted to get rid of him. But he would not be happy with 30 Rs for that less than 3 km. We gave him 40 and sweared never to take a cyclorickshaw again.


How to get to the muzeum? View over the shoulder of our rickshaw. Here the road looks better than in the reality.


The museum was not very good but at least we got to talk to a guy who spoke good English and understood what we are interested in. Finally he gave us the name we needed. We left the museum and – took a cyclorickshaw. But this time I must admit the guy worked well for the money we paid him. I have no idea how he managed through the narrow streets full of pedestrians, bicycles and motorbikes. In addition a dust storm started and I could not even open my eyes, but the rickshaw still went on.

He took us to the old city. Once undoubtedly glorious the houses were covered by dust, wooden carvings badly maintained, some of the stone arcades broken. The rain started. Though better than the sand and dust we were still happy to be able to go and hide in a temple. Suddenly almost cold Mathura seemed strange and a bit hostile. How are we to get back if the weather does not improve?

Luckily it did improve in less than half an hour. No more rain but cloudy and a bit windy, pleasant temperature. Fancy a walk through the old city? What about this street to the right? Oh, there is the river!

Finally we got to the spot where we wanted to come in the first place. Colorful boats rocking at the bank, wet breeze blowing from the river, endless staircases leading to the water here and there interrupted by a wall or small tower built too close to the river Yamuna. We climbed on one of the walls and looked around the river bank. Popular as well as forgotten temples stand there one next to each other. Holy man walks up the road between some cows and dogs. Everything is sleepy, even abandoned. Only the monkeys are jumping briskly here and there.


First sight of the river bank


Colorful boats. But with no passenger seats.


Holy man among the animals at Yamuna river bank



We begin our walk alongside the river. We stride over the staircases, in the dirty sand, we climbe through the half-ruined houses. We refuse the boat for 50 Rs per person – we prefer to walk. Someone almost forces us into a temple. Here you are free to offer as much as you want! (But we did not want to come in the first place.) It is completely your choice! But when we gave him 10 Rs, the priest was not very happy. Only afterwards we found out that this was one of the most reputed temples at Mathura.


We were drawn to the pink one... but I can't remember whether to the first one or to the one in the back.


Lord and dog

We are leaving back to Agra with a feeling that we managed to experience a bit of real mystical India. Though probably not palatable for a mainstream western tourists Mathura maintains a spirit that is so difficult to find among the rushing tourists at Taj Mahal and other famous Agra sights.


sobota 28. května 2011

Fathepur Sikri and Taj Mahal

We wake up at 6 am to go to Fathepur Sikri – small town 40 km far from Agra. Why so early? It is getting increadibly hot around noon especially this time of the year, so we want to manage as much as we can in the morning.

When we get to the bus stand at 7 am, two different people tell us, that the bus to Fathepur won’t leave before 8. Ok, let’s go to get some breakfast then. However there was nothing we would like anywhere close to the bus stand so we decided to get on the bus (which was already waiting there) and eat some bisquits.

It wasn’t even 10 minutes after we have got on the bus and it started moving! It’s around 7:15 and we are leaving the bus stand for Fatherpur Sikri.

Fathepur Sikri monument consists of a mosque, fort and a complex for wifes. It is all made out of red sand stone by Akbar about 100 years before Taj Mahal was built. Akbar abandonned Fathepur after water disappeared and he moved to Agra. However today the monument is a vibrant tourist place with abundance of souvenir sellers (among others) and the old city is a place neglected by the tourists with an authentic indian atmosphere.


View from the bus stand


In front of the mosque


Inside the holy place

Altar for offerings - fabrics and flowers. It will be later given to the poor. After having offered you can tie a small thread at the stone "window" and make 3 wishes - one for every knot.



at the fort



Goats everywhere

Followed by child seller



Kofta. The first and so far the best one. It is made from potatoes stuffed with paneer, keshu, vegetables, etc. - depending on the particular type


After having returned to Agra around 3 pm we really needed some rest before further sightseeing. The next sight for today was Idma-ud-dula (Baby Taj). The entrance fee is „only“ 10 times more than for the locals here. But to make it less pleasant for us they suspected us from shooting a video (probably they didn’t trust my DSLR to be „just“ a camera and not a video camera for which you need to pay extra). We even started reconsidering our plans for Taj Mahal tomorrow. Is it really worth the 750 Rs?


Evening was a good time to go. Both the light and the temperature were pleasant.



Even now, we are still not sure if it was worth it. Taj is beautiful, true. The surrounding gardens are beautiful and the pictures are also beautiful. Even the guide, who took us later to the shops that pay him commission, was actually nice. But the difference in the entrance fee is simply disgusting and the worst thing is that it did not finish with the price. But let me start from the beginning.

We left around 6:30 in the morning. We had payed the ridiculously exagerated entrance fee and got some „V.I.P.“ half litre of water and shoe covers, so that we do not have to take off our shoes when entering the main building (what a gifts!). We continued to a security check and there they wanted to trash our mini stativ! Not even in the wildest dream can the 15 cm plastic tripod be considered a security thread. But order is order.

By that time a local guide had started taking care of us. He was really helpful and took Petr to a safety deposit to leave the tripod there. In the meantime I managed to find out that in our astronomical entrance fee is not included audioguide. And if by any chance you would prefer an audioguide in english rather than in hindi, it will cost you 2 to 3 times more. I have never experienced anything as unfair as at Taj Mahal and other governement run monuments.

Taj Mahal did not beat the bitter taste from the fact, that they openly shave you from your money and after they do not even think about TRYING to make it up by a slighly better service (how much can cost you to provide the audiogide?). I do not regret going there but it was not an ideal experience. Especially when I realized that about one fifth of Indians, who pay 20 Rs, is equally or much more wealthy than I am, another fifth is slightly worse off and those, who are really poor most probably won’t go to visit Taj Mahal.

Tell me now: Do you really think there is a moral duty of „wealthy“ Europeans to help the „poor“ India? In India there is more than enough wealthy Indians. Let them begin to care more about their country and how it really is like. It changes my point of view when I am the only one in the office who takes public transport because unlike the others I can’t afford to pay for the autorickshaw regularly and afterwards their governement takes the tax of 500 Rs on one entrance fee because I am the wealthy tourist.

But let’s have a look at the pictures now to improve the impression :-)


I thought wearing a saari would by stylish




The whole India is little bit upside down...

...you would not believe where you have to go for a good picture.


The beautiful flowers and ornaments are not painted - it is made from semiprecious stones. 3 stones shine in the sun (black onyx, white marble and green malachit) and 3 in the moon. That is the reason for the full moon night visits of Taj Mahal. Surprisingly enough Indians pay the same money as foreigners for those.

Inside the mausoleum. Officialy you should not take pictures there... but no one seemed to care. At least I took them without the flash

středa 9. března 2011

Getting there

A small wonder happend – we managed to get all our luggages on board. (I was really nervous about our hand luggage since it had about 4 more kilos than it was supposed to.) The flight was smooth, only Petr seemed a bit tense as we approached Mumbai.

Landing. 22:35 local time, 26 °C. Holding our immigration forms in one hand and the luggage in the other we went to meet our destiny with the immigration officers (or so it seemed from the guide: „the immigration procedures are lengty and unpleasant...“). Actually no drama happend. My officer even smiled on me as he let me pass through to India.

So what now? Exchange some money and get a taxi. The queue at the first exchange office was incredible, luckily Petr guessed right that there will be another one further on. No queue there :-) The pre-paid taxi office was just next to the exchange. We knew well from our friends that the pre-paid taxis are owned by the state and the prices are given so that the foreigners do not get cheated on. So we asked abou the price to our hotel. 700 Rs?! But we were told it should be around 300 Rs? No, the price is 700 Rs. We were a bit discouraged but we decided not to pay that and we went on. 50 m further there was another pre-paid taxi office. How much to get to the hotel? 390 Rs. (!!!) Really? So no cheating on foreigners at the pre-paid service, right?

We got to the hotel, it was quite nice. The next day we went to explore Mumbai. We thought we would walk but we learned soon that the information about the location in the internet was not right, so we decided to take a bus. We depended totaly on the help of locals, because there are no means how to find out about bus routes and even the streets are not labeled some do not have any name at all.

Luckily there has always been someone willing to help us and no one really cheated on us. It was not that difficult to tell who is going to try to sell you something and who just wants to help you. We went to see the Gate of India and one muzeum. The admission for locals 15 Rs, foreigners 300 Rs... but they recognized ISIC so we could go for 15 Rs! There was a whole bunch of beautiful statues, ivory carvings, pictures and clothes but we would have to pay more to get the permission to take the pictures so no pictures from here, sorry.

In the evening we got into the train without any problem (the only problem was how to fit all our luggage in such a small space) and we even managed to sleep on the way to Hyderabad.