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