Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: libco 13 Října 2008, 21:18:52

Název: Pre niekoho je to hračka, pre mňa záležitosť dlhej doby. :)
Přispěvatel: libco 13 Října 2008, 21:18:52
Potreboval by som script v bash-i, logická postupnosť jednotlivých úkonov je mi známa, problém je ale v tom, že nepoznám jednotlivé príkazy.
Ak by sa niekto nudil, tu je postupnosť.
1. vybrať z odsahu súboru konkrétny riadok na základe jeho známej časti. To som našiel.
>$ cat /cesta/k/súboru/súbor | grep známa_časť,       
konkrétne
>$ cat /var/tuxbox/config/enigma/config | grep s:/ezap/ui/skin
výsledok
s:/ezap/ui/skin=/var/tuxbox/config/enigma/skins/new_blueline_skin_v3.esml
2. súbor new_blueline_skin_v3.esml zálohovať napr v adresári /var/zaloha
3. z tohto riadku vybrať všetko čo je za =
teda  /var/tuxbox/config/enigma/skins/new_blueline_skin_v3.esml
4. nájsť v obsahu súboru new_blueline_skin_v3.esml riadok čo začína
<map name="eServiceSelector.Entry.Description"
a teda celý riadok je
<map name="eServiceSelector.Entry.Description" font="Blue.Regular" size="30" />
5. zväčšiť číslo "30" o 4, teda na "34"
6. uložiť zmeny
7. ukončiť script

Alebo mi poraďte prosím nejakú dobrú literatúru v sk alebo cz jazyku na scriptovanie v bashi.
Ďakujem.
Niekedy som trošku programoval v atari basicu, ale to už je strašne dávno. ;D
Název: Re: Pre niekoho je to hračka, pre mňa záležitosť dlhej doby. :)
Přispěvatel: Vojtěch Trefný 13 Října 2008, 21:24:49
Jaká škola? ;D

http://docs.linux.cz/programming/interpreted/bashdoc-1.4/
http://www.linuxexpres.cz/praxe/serial-o-bashi
Název: Re: Pre niekoho je to hračka, pre mňa záležitosť dlhej doby. :)
Přispěvatel: qUAKER 14 Října 2008, 14:06:17
Kód: [Vybrat]
#!/bin/bash

zaloha=/var/zaloha

if [ -d "$zaloha" ]; then
   echo "OK"
else
   echo "Vytvarim slozku" && mkdir $zaloha
fi

rm -rf /var/zaloha/*

x=$(cat /var/tuxbox/config/enigma/config|grep s:/ezap/ui/skin)
y=$(echo ${x:17})

cp /var/tuxbox/config/enigma/skins/new_blueline_skin_v3.esml $zaloha

old="<map name="eServiceSelector.Entry.Description" font="Blue.Regular" size="30" />"
new="<map name="eServiceSelector.Entry.Description" font="Blue.Regular" size="34" />"

sed -i "s/$old/$new/g" /var/tuxbox/config/enigma/skins/new_blueline_skin_v3.esml

exit 0



Název: Re: Pre niekoho je to hračka, pre mňa záležitosť dlhej doby. :)
Přispěvatel: Martin - ViPEr*CZ* 14 Října 2008, 14:27:03
Jaká škola? ;D

http://docs.linux.cz/programming/interpreted/bashdoc-1.4/
http://www.linuxexpres.cz/praxe/serial-o-bashi
Díks... vypadá to zajímavě... asi začnu studovat... sice mě spíše zajímá C++ (MFC, STL, QT4), ale todle se určitě nestratí, neboť linux jde stále do popředí...  8)
Název: Re: Pre niekoho je to hračka, pre mňa záležitosť dlhej doby. :)
Přispěvatel: libco 14 Října 2008, 18:45:49
Kód: [Vybrat]
#!/bin/bash

zaloha=/var/zaloha

if [ -d "$zaloha" ]; then
   echo "OK"
else
   echo "Vytvarim slozku" && mkdir $zaloha
fi

rm -rf /var/zaloha/*

x=$(cat /var/tuxbox/config/enigma/config|grep s:/ezap/ui/skin)
y=$(echo ${x:17})

cp /var/tuxbox/config/enigma/skins/new_blueline_skin_v3.esml $zaloha

old="<map name="eServiceSelector.Entry.Description" font="Blue.Regular" size="30" />"
new="<map name="eServiceSelector.Entry.Description" font="Blue.Regular" size="34" />"

sed -i "s/$old/$new/g" /var/tuxbox/config/enigma/skins/new_blueline_skin_v3.esml

exit 0





Tejto časti rozumiem:
zaloha=/var/zaloha # vytvorenie premennej

if [ -d "$zaloha" ]; then # ak zložka /var/zaloha existuje vtedy OK
   echo "OK"
else
   echo "Vytvarim slozku" && mkdir $zaloha # ak zložka /var/zaloha neexistuje vtedy ju vytvorí
fi

Tohto sa bojím:
rm -rf /var/zaloha/* # nezmaže to náhodou všetko aj celú zložku /var ???, ak zmaže len súbory v zložke zaloha  je to OK
# niekde som čítal že príkaz ~# rm -rf  je veľmi nebezpečný, možno keby tam bolo rm -f, ale nie som si istý

Tu sú premenné ktoré zdá sa mi, nie sú nikde použité
x=$(cat /var/tuxbox/config/enigma/config|grep s:/ezap/ui/skin) # x= potrebný riadok v súbore config
~# echo $x # výsledok:
~# s:/ezap/ui/skin=/var/tuxbox/config/enigma/skins/new_blueline_skin_v3.esml
y=$(echo ${x:17}) # y= časť riadku od 17 znaku do konca
~# echo $y # výsledok:
~# var/tuxbox/config/enigma/skins/new_blueline_skin_v3.esml
# treba to ošetriť ak sa "s:/ezap/ui/skin" vôbec v súbore config nenachádza a to tak, že script vypíše chybu a ukončí sa

Tu som skúsil použiť premennú $y pretože cesta a názov môžu byť rozne
cp /var/tuxbox/config/enigma/skins/new_blueline_skin_v3.esml $zaloha # zálohovanie old súboru
#pokus
~# cp $y $zaloha # výsledok:
~# cp: chýba operand cieľového súboru za `var/tuxbox/config/enigma/skins/new_blueline_skin_v3.esml'
Viac informácií získate príkazom `cp --help'.
#Skúšal som niečo ale nešlo mi to.

Toto je mi jasné, dúfam
old="<map name="eServiceSelector.Entry.Description" font="Blue.Regular" size="30" />"
new="<map name="eServiceSelector.Entry.Description" font="Blue.Regular" size="34" />"
# vymení 30 za 34, je tam ale problém, riadok určite obsahuje iba to červené, ostatné môže byť inak<map name="eServiceSelector.Entry.Description" font="Blue.Regular" size="30" />

Toto je asi tiež jasné
sed -i "s/$old/$new/g" /var/tuxbox/config/enigma/skins/new_blueline_skin_v3.esml # vymení v súbore riadok old za new

Poradí niekto ako ďalej?

Název: Re: Pre niekoho je to hračka, pre mňa záležitosť dlhej doby. :)
Přispěvatel: libco 16 Října 2008, 21:28:48
Tak potiaľto mi to už funguje:
#!/bin/bash

zaloha=/var/zaloha

if [ -d "$zaloha" ]; then
   echo "OK"
else
   echo "Vytvarim slozku" && mkdir $zaloha
fi

rm -rf /var/zaloha/*

x=$(cat /var/tuxbox/config/enigma/config|grep s:/ezap/ui/skin)
y=$(echo ${x:16})

cp $y $zaloha

old=$(cat $y|grep eServiceSelector.Entry.Description)
výstup:
# echo $old
<map name="eServiceSelector.Entry.Description" font="Blue.Regular" size="30" />

Teraz už len potrebujem nejakým príkazom urobiť aby nasledujúci riadok vyzeral takto:
new="<map name="eServiceSelector.Entry.Description" font="Blue.Regular" size="34" />"
Ešte lepšie by bolo, keby sa to číslo dalo zväčšiť napr. o 4 pretože to pôvodné číslo môže byť tiež rôzne.

Vie mi prosím niekto poradiť?
Název: Re: Pre niekoho je to hračka, pre mňa záležitosť dlhej doby. :)
Přispěvatel: libco 19 Října 2008, 10:47:55
Už som to aj vďaka vám nejako zbastlil. ;D
Výsledný script:
#!/bin/bash

zaloha=/var/zaloha

if [ -d "$zaloha" ]; then
   echo "OK"
else
   echo "Vytvaram zlozku" && mkdir $zaloha
fi

rm -rf /var/zaloha/*

x=$(cat /var/tuxbox/config/enigma/config|grep s:/ezap/ui/skin) # najdi riadok s cestou ku configu

y=$(echo ${x:16}) # cesta ku configu

cp $y $zaloha # zaloha povodneho configu

sed -i '/eServiceSelector.Entry.Description/s/[0-9][0-9]/34/g' $y # zmena hodnoty cisla

exit 0

Čerpal som hlavne odtiaľto: http://sed.sourceforge.net/sed1line_cz.html