08.01.2015 Views

PDF - Xakep Online

PDF - Xakep Online

PDF - Xakep Online

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

PC_Zone<br />

Shell-coding: ïðîãðàììèðóåì â *nix-êîíñîëè<br />

SHuRuP<br />

Êîãäà ñèäèøü â êîíñîëè (à âñå ìû ñ ýòèì ñòàëêèâàåìñÿ),<br />

íåâîëüíî õî÷åòñÿ îïòèìèçèðîâàòü/óïðîñòèòü ðàáîòó â<br />

íåé. Êàê ýòî ñäåëàòü Ìíîãèå ïîñîâåòóþò ó÷èòü Ñ/Ñ++,<br />

íî çà÷åì íàïðÿãàòüñÿ áîëüøå, åñëè åñòü ñïîñîá ïðîùå<br />

Ó âñåõ *nix-ñèñòåì (ñîâðåìåííûõ) îáÿçàòåëüíî åñòü íåñêîëüêî<br />

êîìàíäíûõ èíòåðïðåòàòîðîâ, âîò ñàìûå èçâåñòíûå<br />

èç íèõ:<br />

Bourne Shell aka /bin/sh - èìåííî îí è áóäåò ðàññìàòðèâàòüñÿ<br />

â ýòîé ñòàòüå (èíèöèàëèçàöèÿ - .profile);<br />

Bourne-Again Shell aka /bin/bash - èäåíòè÷åí Bourne<br />

Shell (.profile è .bashrc);<br />

C Shell aka /bin/csh - èíòåðïðåòàòîð äëÿ C-ïðîãðàììåðîâ<br />

(.login è .cshrc).<br />

<br />

 û ï î ë í å í è å<br />

ñêðèïòîâ íà sh<br />

ðàâíîñèëüíî íàáèðàíèþ<br />

âñåõ ýòèõ êîìàíä ñ êîíñîëè.<br />

Âñå ïðîãðàììû äîëæíû íà÷èíàòüñÿ ñ: #!/bin/sh<br />

Êîììåíòàðèè íà÷èíàþòñÿ ñ ïîìîùüþ ñèìâîëà '#'. Çíà-<br />

÷åíèÿ ïåðåìåííûì çàäàþòñÿ òàê:<br />

var1=value<br />

var1 - ïåðåìåííàÿ, value - çíà÷åíèå ýòîé ïåðåìåííîé.<br />

Äàëüøå ñëåäóåò èñïîëüçîâàòü äàííóþ ïåðåìåííóþ ñ<br />

ñèìâîëîì '$' â íà÷àëå ($var1). Ñóùåñòâóþò òàêæå äðóãèå<br />

âîçìîæíîñòè ïîëó÷åíèÿ ïåðåìåííîé:<br />

${var1}text - îòäåëÿåò çíà÷åíèå $var1 îò ïîñëåäóþùåãî<br />

òåêñòà (text);<br />

${var1:=var2} - åñëè çíà÷åíèå $var1 íå îïðåäåëåíî, òî<br />

åé ïðèñâàèâàåòñÿ çíà÷åíèå $var2;<br />

${var1:-var2} - åñëè çíà÷åíèå $var1 íå îïðåäåëåíî, òî<br />

âûâîäèòñÿ çíà÷åíèå $var2 ($var1 îñòàåòñÿ íå îïðåäåëåííûì).<br />

<br />

#!/bin/sh<br />

#script 1<br />

var1=text1<br />

var2=text2<br />

echo ${var1}klm<br />

#âûâåäåò text1klm<br />

echo ${var1:=$var2}<br />

#âûâåäåò text1<br />

echo ${var4:=$var2}<br />

#âûâåäåò text2<br />

echo ${var4:-$var1}<br />

#âûâåäåò text2<br />

Íåêîòîðûå ïåðåìåííûå, èñïîëüçóåìûå sh:<br />

$$ - pid òåêóùåãî shell'à;<br />

$! - pid ïîñëåäíåãî ïðîöåññà â ôîíîâîì ðåæèìå;<br />

$ - êîä âîçâðàòà ïîñëåäíåãî ïðîöåññà;<br />

$x - ãäå x-÷èñëà: ïàðàìåòðû, ïåðåäàííûå ñêðèïòó ($0 -<br />

ïîñëåäíèé çàïóùåííûé ñêðèïò).<br />

#!/bin/sh<br />

#script 2<br />

echo "script filename: $0"<br />

#âûâåäåò íàçâàíèå ôàéëà äàííîãî ñêðèïòà<br />

echo "value1: $1"<br />

#âûâåäåò ïåðâûé ïàðàìåòð, çàäàííûé ñêðèïòó<br />

echo "value2: $2"<br />

#âûâåäåò âòîðîé ïàðàìåòð, çàäàííûé ñêðèïòó<br />

Ïàðàìåòðû ñêðèïòó çàäàþòñÿ òàê:<br />

/home/shurup/script1 value1 value2 value3<br />

value1, value2, value3 - ïàðàìåòðû äëÿ ñêðèïòà.<br />

Shell-coding:<br />

 Bourne Shell òàêæå âîçìîæíî ñîçäàíèå óñëîâèé:<br />

if [ óñëîâèå ]<br />

then äåéñòâèÿ ïðè âûïîëíåíèè óñëîâèÿ<br />

else äåéñòâèÿ ïðè íåâûïîëíåíèè óñëîâèÿ<br />

fi<br />

<br />

#!/bin/sh<br />

#script 3<br />

if [ $1 == $2 ]<br />

then echo "$1 ðàâíî $2"<br />

else echo "$1 íå ðàâíî $2"<br />

fi<br />

Öèêëû â sh ñîçäàþòñÿ òàê:<br />

while êîìàíäà1<br />

do<br />

äåéñòâèå1<br />

done<br />

Äåéñòâèå1 áóäåò èñïîëíÿòüñÿ äî êîíöà âûïîëíåíèÿ êîìàíäû1.<br />

<br />

#!/bin/sh<br />

#script 4<br />

while :<br />

do<br />

echo test<br />

done<br />

 ñëó÷àå çàïóñêà ýòîãî ñêðèïòà êîìàíäà 'echo test' áóäåò<br />

âûïîëíÿòüñÿ â áåñêîíå÷íîì öèêëå.<br />

Äëÿ ñ÷èòûâàíèÿ èíôîðìàöèè â sh èñïîëüçóåòñÿ êîìàíäà<br />

'read'.<br />

<br />

#!/bin/sh<br />

#script 5<br />

cat ./sh_script5.txt | grep text1 |<br />

while read text<br />

do<br />

if [ $text == "text1" ]<br />

then echo "text1 áûë óñïåøíî<br />

íàéäåí â ôàéëå sh_script5.txt"<br />

else echo "text1 íå áûë íàéäåí<br />

â ôàéëå sh_script5.txt"<br />

fi<br />

done<br />

Ýòîò ñêðèïò íàäî çàïóñêàòü èç îäíîãî êàòàëîãà ñ ôàéëîì<br />

sh_script5.txt. Ôàéë sh_script5.txt âûãëÿäèò ïðèìåðíî<br />

òàê:<br />

text7<br />

text45<br />

text1<br />

text35<br />

È íà ýòîò ôàéë äîëæíî áûòü ïðàâî ÷òåíèÿ (chmod +r<br />

sh_script5.txt).<br />

Òåïåðü òû çíàêîì ñ îñíîâàìè êîäèíãà â Bourne<br />

Shell. Óñïåõîâ íà ýòîì ïîïðèùå!<br />

P.S. Âñå ñêðèïòû ìîæíî ñêà÷àòü çäåñü:<br />

http://nix.h1.ru/articles/shprog.zip<br />

33

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!