Bash scripting :: 2.dil

Zdroj: SOOM.cz [ISSN 1804-7270]
Autor: Nostur
Datum: 21.11.2006
Hodnocení/Hlasovalo: 2.86/14

Scriptovani v bashi, druhy dil

0x01 :: Intro

Tak sem tu zase s novou varkou doufam uzitecnych informaci o bash scriptingu, dnes by jsme si ukazali case loop, pouzivani prikazu v promennych, take hratky s promennymi, pouzivani escape sekvenci a ktere jsou vyhrazene, a urcite take zakladni arrays a funkce a !!mozna!! i barvicky, pokud uz to nebude moc dlouhe

0x02 :: Case loop
#!/bin/bash
echo "zadejte nejake cislo [1.2]";
read promenna #default STDIN
case $promenna in #zacatek case loop
1)
echo "zadali jste 1" #po zadani cisla 1 se aktivuje tato moznost
;; # dva strednniky nesmi nikdy chybet
2) #po zadani cisla 2 se aktivuje tato moznost
echo "zadali jste 2"
;;
*) #Pokud zadate cokoliv jineho, aktivuje se tato moznost
echo "Whatever" # pouziva wildcard *
;;
esac #ukoncovaci syntaxe



Zde je videt ze muzeme tvori lehka vyberova menu, nebo reagovat na predpokladane podnety, napriklad kdyz chceme zobrazit po spusteni scriptu ruzne osloveni v zavislosti na datu.

0x03 :: Prikazy v promennych #!/bin/bash
cas=`date +"%r"` #nacteni casu do promenne, pro vice moznosti formatovani viz `man date`
echo "cas je $date"; #uziti promenne pro echo
echo "cas je take `date`" #prime a prehlednejsi pouziti pro promenne ktere neni nutne rucne menit



0x04 :: Hratky s promennymi
Nekdy se muze stat, ze budete pouzivat dlouhou syntaxi a nebudete se chtit ztratit, muze se hodit jina syntaxe, kterou vam ukazu:
#!/bin/bash
read var1
echo "$var1";
echo "${var1}"; # toto echo printne stejny vyraz, jako to predtim



Vypisovani logicke posloupnosti:
#!/bin/bash
echo {1..1337} # Vypise posloupnost cisel od 1 do 1337. u tohoto stylu NESMI byt pouzity zadne uvozovky


Napriklad nastavovani defaultnich hodnot u promennych
#!/bin/bash
echo ${username-`whoami`} # pouzit prikaz v ``, ${} a defaultni hodnota, ktera je nastavena pomoci -


0x05 :: Escape sekvence
\a ASCII bell
\d datum ve formatu "Den v tydnu Me
\e ASCII escape znak
\h hostname do prvniho `.
\H hostname
\j pocet `jobs` ktere prave bash vykonava
\l basename terminaloveho zarizeni shellu
\n novy radek
\r carriage return
\s jmeno shellu
\t cas 24-hodinovem HH:MM:SS formatu
\T cas v 12-hodinovem HH:MM:SS formatu
\@ cas v 12-hodinovy am/pm formatu
\u jmeno uzivatele ktery prave ted bash pouziva
\v verze bash
\V vydani bashe, verze a patchlevel
\w stejne jako `pwd`
\W the basename od `pwd`
­ \$ pokud effective UID je 0, pak #, pokud ne tak $
\nnn ASCII znak ktery odpovida osmickove hodnote nnn
\\ zpetne lomitko



Escape sekvence jsou ruzne pouzivany ve scriptech na formatovani a printovani ruznych veci, nevim, co vice bych k nim rekl. Snad jen ze je pouzijeme v mojich budoucich clancich o tvoreni .bashrc

0x06 :: Arrays

Arrays, cesky tedy pole jsou jednim z imho mene vyuzivanych moznosti v bash scriptingu, ale i tak se vam muzou nekdy urcite budou hodit. Nasleduje velmi dlouhy priklad ve kterem je vse vysvetleno:
#!/bin/bash
area[11]=23 #Takhle vlozime jednu vec do pole
area[13]=37
area[51]=UFO

echo -n "area[11] = "
echo ${area[11]} # {} jsou potreba

echo -n "area[13] = "
echo ${area[13]}

echo "Obsah area[51] je ${area[51]}." #vypis obsahu pole

echo -n "area[43] = " #nacteni pole do ktereho nic nevkladame
echo ${area[43]}
echo "(area[43] neni urcena!!)"

echo

area[5]=`expr ${area[11]} + ${area[13]}` #secteme dve pole a ulozime do tretiho
echo "area[5] = area[11] + area[13]"
echo -n "area[5] = "
echo ${area[5]}

area[6]=`expr ${area[11]} + ${area[51]}` #nebude fungovat protoze pridavani integeru do retezce neni povoleno
echo "area[6] = area[11] + area[51]"
echo -n "area[6] = "
echo ${area[6]}

echo; echo; echo

area2=( nula jedna dva tri ctyri ) #I takhle muzeme do pole vlozit veci
echo -n "area2[0] = "
echo ${area2[0]} # Vybirani veci z poli startuje od 0, tedy area2[0] vybere PRVNI prvek pole

echo -n "area2[1] = "
echo ${area2[1]}

echo; echo; echo

area3=([17]=sedmnact [24]=ctyriadvacet) #ale i takhle muzeme do pole vlozit veci

echo -n "area3[17] = "
echo ${area3[17]}

echo -n "area3[24] = "
echo ${area3[24]}



0x07 :: Requiem

Tak je zas dalsi dil za nami, doufam ze jste si uzili tak jako ja pri jeho psani :P Bohuzel, fajl je dosti dlouhy, takze barvicek a funkci se dockate priste! :] Dobereme take nejake veci, ktere jsem zapomnel zminit, take uvedu nekolik jednoduchych i tezsich scriptu na ukazku, a prejdeme na awk a sed, jedny z nejdulezitejsich veci v bashi. Jako vzdy, dotazy a pripominky na admin@tkroupa.net, flame do /dev/null a catujte urandom