Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Pre niekoho je to hračka, pre mňa záležitosť dlhej doby. :)  (Přečteno 3518 krát)

libco

  • Návštěvník
  • Příspěvků: 64
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
LAPTOP COMPAQ, ubuntu Edge, procesor 2000MHz, RAM 256M, HDD 20G, CD-RW


qUAKER

  • Host
Re: Pre niekoho je to hračka, pre mňa záležitosť dlhej doby. :)
« Odpověď #2 kdy: 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



« Poslední změna: 14 Října 2008, 15:23:01 od qUAKER »

Martin - ViPEr*CZ*

Re: Pre niekoho je to hračka, pre mňa záležitosť dlhej doby. :)
« Odpověď #3 kdy: 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)
Open source is gold way... Mint 17.2, Debian 8.1 Jessie| Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

libco

  • Návštěvník
  • Příspěvků: 64
Re: Pre niekoho je to hračka, pre mňa záležitosť dlhej doby. :)
« Odpověď #4 kdy: 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?

LAPTOP COMPAQ, ubuntu Edge, procesor 2000MHz, RAM 256M, HDD 20G, CD-RW

libco

  • Návštěvník
  • Příspěvků: 64
Re: Pre niekoho je to hračka, pre mňa záležitosť dlhej doby. :)
« Odpověď #5 kdy: 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ť?
« Poslední změna: 16 Října 2008, 21:47:12 od libco »
LAPTOP COMPAQ, ubuntu Edge, procesor 2000MHz, RAM 256M, HDD 20G, CD-RW

libco

  • Návštěvník
  • Příspěvků: 64
Re: Pre niekoho je to hračka, pre mňa záležitosť dlhej doby. :)
« Odpověď #6 kdy: 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
LAPTOP COMPAQ, ubuntu Edge, procesor 2000MHz, RAM 256M, HDD 20G, CD-RW

 

Provoz zaštiťuje spolek OpenAlt.