po dlhej (polrocnej? hehehe) odmlke som sa znovu dostal k tomuto serialu a napisal som dalsiu cast. verim ze uz to pojde rychlejsie :D v tejto casti si povieme nieco o bash konfiguracnych suboroch,nejakych jednoduchych nastaveniach a pozreme sa na premenne..
v konfguracnych suboroch BASHu su ulozene premenne prostredia.. (bodka pred subormi znamena ze subor je skryty.. to je snad jasne)
/etc/profile je citany pri logovani ako prvy a obsahuje globalne nastavenia pre vsetkych
.bash_profile vykona sa zakazdym pri prihlasovani usera (takze lokalne nastavenia).. tento subor je najcastejsie preferovany a sluzi pre individualne nastavenia alebo zmeny defaultnych nastaveni..
.bash_login ma tu istu funkciu a vykonava sa v pripade ze .bash_profile neexistuje (synonymum .bash_profile)
.profile ak neexistuju popredne dva tak sa pouzije tento (synonymum .bash_profile)
.bash_logout pri vylogovani
.bashrc sa pouziva v takzvanom "non-login shelli"..
.bash_history
historia prikazov zadavanych userkom.. vdaka tomu mozme napriklad pomocou prikazu history vypisat poslednych x prikazov (priklad history 5.. vypise 5 posledne vykonanych prikazov) kurzorov hore/dole rychlo pozret/vyuzit skor pouzity prikaz... toto vsak je nie vzdy vyhodne a preto ak potrebujeme rovno spustit prikaz priamo z historie pouzijeme vykricnik ! a za nim cislo riadku na ktorom je v historii prikaz napr. !74 :) ale da sa to pouzit tiez velmi zaujimavo nejako takto !vyraz - namiesto slova vyraz dosadime hladany vyraz napriklad !ps nam moze najst v historii ps aux a ten spusti. existuju tiez finticky ako !! ktory spusti predchadzajuci prikaz.. pomocou premennych HISTFILE a HISTSIZE mozme nastavit nazov suboru do ktoreho sa loguje a jeho max. velkost.. o premennych vsak zachvilu.. vo vacsine
distribucii je HISTSIZE nastavena na hodnotu 1000 co pre nas znamena ze nam to zaloguje poslednych 1000 vykonanych prikazov...
.bashrc a etc/bashrc
sem sa davaju rozne uzivatelske nastavenia, aliasi, funkcie... /etc/bashrc je logicky globalne nastavenie (pre vsetkych juzrov) a .bashrc v adresari juzra lokalne..
echo
dostavame sa k prvemu prikazu a tym je echo.
echo nam vypisuje na standardny vystup dane. Vyskusat si to mozme na primitivnom priklade
echo pokus
(nie, nie hello world :)), tymto by sme mali dosiahnut vypisanie slova pokus. Mozme to skusit aj s viac parametrami (slovami), echo to v pohode zvlada :> napriklad
echo moj bash pokus
iste vam uz je jasne ze dostaneme: moj bash pokus.
ak chceme aby bolo viac vyrazov spojenych do jedneho argumentu pouzijeme " " alebo ' '.
prikaz echo ma aj 3 podstatne prepinace (switche,flagy.. kazdy to vola inac)
-n hovori o tom ze na koniec riadku sa neprida znak novy riadok. (defaultne echo pridava na koniec tento znak)
-e aby echo rozumelo specialnym znakom (naopak -E zakaze specialne znaky)
specialne znaky:
\e – znak escape
\n – novy riadok
\t - horizontalny tab
\v - vertikalny tab
\\ - opacne lomitko (backslash)
to su aspon niektore zakladne.. dalsie si mozte lahko pozriet man echo
mala ukazka...
echo -e "datum\ttodo\n15.1\tnapisat tuto cast serialu\n17.1\tbla bla bla :P"
spravy nam to "tabulku", keby sme vsak puzili -E tak sa nepouziju specialne znaky a dostaneme to co je v uvodzovkach. dufam ze je to dost jasne :) ...a ideme dalej
premenne
premenne su velmi dolezitou sucastou bashu (ako aj inych jazykov).. je to vlastne akasi schranka s nazvom ktora prechovava hodnotu. premenne by sme si mohli rozdelit na shellove, specialne(definovane systemom) a premenne uzivatelske/programov(premenne v shell skriptoch..)
v BASHi je dobrym zvykom pisat nazvy premennych VELKYMI pismenami.
nejake tie shellove premmenne na ukazku...
BASH=/bin/bash - cesta k bashu
BASH_VERSION='3.1.17(2)-release' - verzia daneho shellu...
COLUMNS=80 - sirka terminalu v znakoch
HISTFILE=/home/patoman/.bash_history - subor kam sa loguje historia o ktorej sme hovorili vyssie
HISTFILESIZE=500
HISTSIZE=500
HOME=/home/patoman - domovsky adresar
HOSTNAME=mojserver.sk - hostname masiny
LINES=24 - pocet riadkov terminalu
PS1='\u@\h:\w\$ ' - nastavenie prompt-u... povieme si o tom blizsie neskor
PWD=/home/patoman
SHELL=/bin/bash - cesta k nasmu shellu
USER=patoman
je tu este jedna velmi dolezita systemova premenna PATH kam sa shell pozera v pripade ze ma vykonat nejaky externy prikaz/program a nebola mu zadefinovana ina cesta. (cesty oddelujeme : dvojbodkou). takze ak spustame nejaky program a nezadame k nemu cestu system hlada program v tychto cestach, ak nenajde vypluvne to na nas
staru znamu hlasku command not found. na nieco podobne sluzi CDPATH ktory vsak nehlada subory ale adresare. v podstate sluzi na zjednodusenie prace s prikazom cd...
ak by sme radi vediet hodnotu danej premennej staci poznat jej nazov.. napr. chcete juknut na hodnotu premennej HISTFILE postaci:
echo $HISTFILE
resp mozte pozriet cez env na vsetky systemove premenne.
nejake tie specialne premenne...
$# - pocet parametrov poslanych k programu
$0 - nazov programu sameho
$1,$2,$3 ... - dalsie parametre...
#? - kod ukoncenia programu
uzivatelske premenne
su vlastne premenne definovane v nasich skriptoch.. o tom ze to je schranka s nazvom prechovavajuca hodnotu sme si uz povedali vyssie. premenne v bashi su case sensitive (tzn. rozlisuje velke a male pismena, SERVER nieje to iste co SeRvEr...), v bashi tiez netreba definovat typ premennej (ako napriklad v cecku int,char...)
syntax: PREMENNA=hodnota
priklad:
CISLO=1337
PREDMET="laptop"
do premennych sa odvolavame pomocou znaku $, napriklad:
echo $PREDMET
hodnoty premennych mozme jednoducho doplnat alebo prepisovat. prepisanie funguje presne tak ako v pripade
tvorenia/naplnania premennej. doplnat mozme jednoduchou fintou:
VETA="dobry den"
echo $VETA
VETA="$VETA ti prajem"
echo $VETA
toto sa da naozaj rozne kombinovat.. predvediem este jeden uplne jednoduchy priklad, neskor to bude mat
samozrejme dolezitejsi vyznam.
MENO=MICHAL
VEK=29
VETA="$MENO ma $VEK rokov."
echo $VETA
prikazom unset vyraz (namiesto vyraz - nazov premennej) zrusime danu premennu
pre tuto cast serialu je to vsetko, v dalsej casti si dokoncime premenne a pozrieme sa na aliasi...
len tak dalej ;)
______________
nález plný strát
1) nie je tam pri premennych spomenuty prikaz export, totizto ak si zadefinujes premennu napriklad takto
PENIS = "velky"
bude dostupna len v lokalnom scope skriptu, ale nepremietne sa do prostredia, cize nejaky skript spusteny z tohto skriptu o nej vediet nebude, ale ak pouzijes
export PENIS = "velky"
bude o nej prostredie vediet
2) je tam sice spomenute, ze viacero parametrov sa moze spajat do jedineho pomocou "..." a '...', ale nie je spomenute, ze nahrada premennych (a wildcardov) sa vykona len v ramci "..." a obsah medzi '...' sa interpretuje AS-IS, cize preklad premennych sa nevykona
3) v druhom bloku kodu odspodu mas chybu :)
$VETA="dobry den"
vygeneruje chybu bash: unknown command on line XY, znak $ na zaciatku je navyse ;)
analogicky na tretom riadku.
ale ja viem, casty preklep... :)
inac ma ten serial celkom potencial, bash je mocny nastroj.
---
Cuchat s nadchou, to je ako sniffovat bez promiscu.
1. bude v dalsej casti serialu
2. ano spravne v pripade '' sa obsah vypise presne tak ako je takze premenne sa neberu v uvahu
3. opravene
dik
ventYl, tie tvoje priklady fakt stoja za vsetky drobne :D
ale serial sa paci aj mne, len tak dalej..
--
"To err is human, but to forgive is divine."
podla mna dnes kazdy muz musi dat najavo svojmu okoliu, ze ma velky penis, preto
export PENIS="velky"
je klucovym prikazom kazdeho uspesneho muza :]
---
Cuchat s nadchou, to je ako sniffovat bez promiscu.
> plodna diskusia ktora by obsahovala napady ako to ci ono zlepsit/skratit/urychlit.
perl? :D
---
Windows NT was supposed to hit Unix hard. It did - like a bug hitting a windshield.
jeej taky sexi clanok pre mladych haxorov treba viac :D very usefull ;)
chcem sa ospravedlnit, ze sa to znovu zacina natahovat ale mam skuskove.. novy diel vsak pride coskoro
zivot je tazky - jeden z najtazsich