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

1 komentář:

  1. Hence of this 2 large “ experts” specified while in the SMU Campus 7 days a week piece of writing – Bad guy as well as Cordain – one of these is without a doubt questionable by preferred in relation to research references (Hair), even while an individual was initially some reputable scientist though your partner's job has long been commonly refusted being an imprecise visualize in man chemistry and biology and likewise our ancestors diet habits. https://imgur.com/a/EOwOUNU https://imgur.com/a/GoODXWi https://imgur.com/a/69on0mh https://imgur.com/a/oCLGvvP https://imgur.com/a/UiLtUwb https://imgur.com/a/AXtfa9n https://imgur.com/a/UT19APU

    OdpovědětVymazat