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: webhope 22 Října 2009, 13:24:47

Název: pokusné scripty
Přispěvatel: webhope 22 Října 2009, 13:24:47
Zdar,
zkoušel jsem nějaké scripty, které jsem kdysi dávno zkoušel ve škole, ale píše mi to nějaké chyby. Změnili se nějak od té doby pravidla nebo názvy příkazů? Je to asi tak pět let a myslím, že to jelo snad na redheadu (nebo tu možná rozhoduje typ shellu, který to obsluhoval?).

Kód: [Vybrat]
clear
read B
case "*censored*" in B)
echo "sproste slovo!";;

Tak tohle mělo po napsání sprostého slova a odentrování napsat, že jde o sprosté slovo..

Kód: [Vybrat]
pom=0
while [ "new" !< "1000" ]
do
 read
 $pom=$(($pom+$new))
done

A tohle nevím co přesně mělo dělat. Jen to zatím zkouším a chci vědět proč to nejede. Dříve to jelo myslím i v SUSE.

Jinak konkrétní dotaz. Mohu ze scriptu spouštět další scripty stylem ./muj_script ? Já jen že v DOSu se to dělá pomocí call, jinak po volání scriptu dojde k ukončení.
Název: Re: pokusné scripty
Přispěvatel: webhope 22 Října 2009, 13:47:17
Citace
A tohle nevím co přesně mělo dělat. Jen to zatím zkouším a chci vědět proč to nejede.
;D
Tohle se mi hodně líbí.

No čemu se tak směješ, ono to dříve jelo, jen po pěti letech, člověk zapomene, co to původně dělalo... Jde mi o to zjistit, v čem se změnila syntaxe.

Kód: [Vybrat]
./test6: line 2: 1000: No such file or directory
tohle je k tomu poslednímu příkladu. Je mi na tom divné to 'new' - podle mě by tam měla být spíš proměnná. No asi to je nějaká blbost. A proč nejede ten příkaz s case?
Název: Re: pokusné scripty
Přispěvatel: MacHala 22 Října 2009, 13:48:47
hm, nejsem zrovna v linuxu, takze s prvnim ti neporadim, protoze syntax "case" si nepamatuju; druhej ti nemohl jet ani v redHATu ani v Suse
protoze v te podmince porovnavas dva rozdilne stringy (melo tam asi byt "$new"), ten operator si taky nevybavuju (ale nerikam, ze to nemuze byt neco exotickyho) a v tom radku s read jsi to pravdepodobne chtel ukladat do promene new, ale neukladas, takze to tam funguje jako pozastaveni skriptu... a i kdybys tam tyhle chyby neudelal, tak vzhledem k tomu, ze nevypisujes zadny vysledek, ti to na moc nebude

ad druha otazka: muzes
Název: Re: pokusné scripty
Přispěvatel: webhope 22 Října 2009, 13:59:22

line 2: 1000: No such file or directory
Název: Re: pokusné scripty
Přispěvatel: webhope 22 Října 2009, 14:04:15
Co je to vlastně za jazyk, ať vím kde heldat nápovědu. Díky.

Jinak mě fascinuje, že se tam dají tvořit a volat funkce. Ještě by se hodila obdoba dosovského "goto":

#1 návěští:
#2 příkaz
#3 příkaz
#4 příkaz
#6 goto návěští
(cyklická smyčka, z řádku 6. skoč na návěští (tj. na řádek 1))
Název: Re: pokusné scripty
Přispěvatel: MacHala 22 Října 2009, 15:07:56
je to bash, takze hledej bash scripting

k tomu erroru, jak jsem uz psal - ten operator neni platny(resp. to ocividne vubec neni operator), takze se snazi presmerovat obsah souboru 1000

uznavam, ze goto se nekdy muze hodit, ale je to programatorska berlicka, bez ktere se da vzdy obejit - v tom prikladu co pises lze pouzit napr while cyklus :D
Název: Re: pokusné scripty
Přispěvatel: webhope 22 Října 2009, 15:19:23
uznavam, ze goto se nekdy muze hodit, ale je to programatorska berlicka, bez ktere se da vzdy obejit - v tom prikladu co pises lze pouzit napr while cyklus :D

Nechtěl jsem použít while; ta smyčka z toho vyšla jako vedlejší produkt. No například, pokud se povede příkaz jdi na návěští 'start', pokud se nepovede jdi na návěští 'finish'
Název: Re: pokusné scripty
Přispěvatel: MacHala 22 Října 2009, 15:56:17
... No například, pokud se povede příkaz jdi na návěští 'start', pokud se nepovede jdi na návěští 'finish'
kombinaci cyklu a podminek toho dosahnes taky (u nejakych zanorenych cyklu apod to uz muze byt trosku slozitejsi, ale vzdycky to jde... vysi programovaci jazyky nemaji goto bezne)
Název: Re: pokusné scripty
Přispěvatel: webhope 22 Října 2009, 16:03:44
kombinaci cyklu a podminek toho dosahnes taky (u nejakych zanorenych cyklu apod to uz muze byt trosku slozitejsi, ale vzdycky to jde... vysi programovaci jazyky nemaji goto bezne)

tak pak funkce
Název: Re: pokusné scripty
Přispěvatel: MacHala 22 Října 2009, 16:12:48
co s funkcemi?
v bashi vypada fce ala
Citace
funkce() {
return 0
}
Název: Re: pokusné scripty
Přispěvatel: webhope 22 Října 2009, 17:23:49
co s funkcemi?
v bashi vypada fce ala
Citace
funkce() {
return 0
}

Jo funkci jsem už viděl a vím taky jak se volá. Ale nevím jak se pracuje s globální proměnnou, musí se to deklarovat uvnitř funkce nebo vevnitř (a jak?). Nebo mají funkce proměnné sdílené?
Název: Re: pokusné scripty
Přispěvatel: Yontalcar 22 Října 2009, 17:29:48
funkce mají proměnné sdílené

pročti si man bash a man test
taky si můžeš přečíst http://docs.linux.cz/programming/interpreted/bashdoc-1.4/ (http://docs.linux.cz/programming/interpreted/bashdoc-1.4/)
Název: Re: pokusné scripty
Přispěvatel: webhope 22 Října 2009, 17:37:22

Tak u toho case je špatná syntaxe, musí to končit na esac; jsem si myslel, že tam něco schází. Asi jsem ty scripty neopsal úplně správně.
Název: Re: pokusné scripty
Přispěvatel: fish 22 Října 2009, 18:58:38
Je tam viac chýb
-chýba esac
case "$B" in "*censored*")

Keď zabudnem syntax
cd /etc/init.d/
grep case *
otvorím si niektorý script a pozriem ako sa používa príkaz v praxi.

Alebo ešte lepšie prečítať
http://www.abclinuxu.cz/serialy/bash

Prípadne v google zadať
bash prikazy site:.cz
- veľa literatúry v češtine
Název: Re: pokusné scripty
Přispěvatel: webhope 22 Října 2009, 19:40:10

Blbě jsem to opsal již před těma pěti lety. To jsem opisoval z tabule a to nebylo v prostředí KDE tak nebyl čas někde listovat (anebo jsem to zkoušell z hlavy, už nevím). Ten učitel psal rychle. Ale je fakt, že ten soubor nebyl označený jako spustitelný, takže to prostě nebylo dořešené.
Název: Re: pokusné scripty
Přispěvatel: webhope 22 Října 2009, 20:04:43
dal by se k tomu slovu přiříst regulární výraz?

case $B in
  *"*censored*"*)

asi to není dobře, protože mi to nefuguje.
Existuje něco na obdobu dosovského pause? (Press any key to continue?)
Název: Re: pokusné scripty
Přispěvatel: fish 22 Října 2009, 20:29:33
Dá sa - urobil som si script ktorý zbalí všetku dokumentáciu do .7z a originále súbory odloží:
Kód: [Vybrat]
#! /bin/bash

ZAL=/tmp/zaloha

zbal () {
7z a -mx=7 "$i".7z "$i"
RETVAL=$?
if [ $RETVAL -ne 0 ] ;then
echo "Chyba pri kompresii\nSubor: $i"
exit 1
else
mv "$i" "$ZAL"
fi
}

if [ ! -d $ZAL ]; then
        mkdir $ZAL
fi

for i in *; do
case $i in
*.[Dd][Oo][Cc])
zbal ;;
*.[Pp][Dd][Bb])
zbal ;;
*.[Pp][Dd][Ff])
zbal ;;
*.[Tt][Xx][Tt])
zbal ;;
*.[Ll][Ii][Tt])
zbal ;;
*.[Rr][Tt][Ff])
zbal ;;
esac
done

edit:
 
press ...  :)
echo "Press any key to continue" ; read key
Název: Re: pokusné scripty
Přispěvatel: MacHala 22 Října 2009, 20:38:13
Existuje něco na obdobu dosovského pause? (Press any key to continue?)
... a v tom radku s read jsi to pravdepodobne chtel ukladat do promene new, ale neukladas, takze to tam funguje jako pozastaveni skriptu...
takze zkus hadat 3x - pomoci jakeho prikazu to udelas?
Název: Re: pokusné scripty
Přispěvatel: webhope 22 Října 2009, 21:04:26
Existuje něco na obdobu dosovského pause? (Press any key to continue?)
... a v tom radku s read jsi to pravdepodobne chtel ukladat do promene new, ale neukladas, takze to tam funguje jako pozastaveni skriptu...
takze zkus hadat 3x - pomoci jakeho prikazu to udelas?
takže pause
Název: Re: pokusné scripty
Přispěvatel: MacHala 22 Října 2009, 21:08:00
Existuje něco na obdobu dosovského pause? (Press any key to continue?)
... a v tom radku s read jsi to pravdepodobne chtel ukladat do promene new, ale neukladas, takze to tam funguje jako pozastaveni skriptu...
takze zkus hadat 3x - pomoci jakeho prikazu to udelas?
takže pause
hm, tak to je prvni pokus spatne... vsimni si, ze na tvou otazku jsem odpovedel svoji vlastni citaci - takze odpoved bude pravdepodobne nekde v ni...
Název: Re: pokusné scripty
Přispěvatel: fish 22 Října 2009, 21:11:56
pause neexistuje
read -n 1 -p "Press any key to continue"
Název: Re: pokusné scripty
Přispěvatel: webhope 22 Října 2009, 21:16:12
pause neexistuje
read -n 1 -p "Press any key to continue"

trochu složité, ale geniální  :)
Název: Re: pokusné scripty
Přispěvatel: webhope 22 Října 2009, 21:22:36
Tak jsem zkusil sesmolit ten instalační script, snad tam nebude moc chyb. Mohli by jste mi ještě udělat aby když spustím script s parametrem untar nebo undp nebo obojí, měla by se spustit pouze ta jedna konkrétní fnc. Já nevím jak ošetřit ty parametry (arguimenty za scriptem).

Kód: [Vybrat]
pauze () {
read B -n 1 -p "Press any key to continue" || pauze()
# pokud pauze a key pressed exit script
if ["$B"] ; then exit 2
fi;
}

ati () {
./ati-driver-installer-9-9-x86.x86_64.run || pauze()
return 0;
}

untar () {
tar xvfz xampp-linux-1.7.2.tar.gz -C /opt || pause()
tar xvfz krusader-2.0.0.tar.gz -C /opt || pause()
tar xvfz kino-1.3.4.tar.gz -C /opt || pause()
return 0;
}

undp () {
dpkg -i skype-ubuntu-hardy_2.1.0.47-1_386.deb || pause()
dpkg -i startupmanager_1.9.12-1_all.deb || pause()
dpkg -i lives_1.1.4-1~getdeb1_i386.deb || pause()
return 0;
}

# pokud žádný parametr
ati()
# pokud parametr untar
untar()
# pokud parametr undp
undp()

# pokud žádný parametr
./browsers/binstall.sh || pause()

# pokud žádný parametr
./grub/programs_install.sh || pause()
Název: Re: pokusné scripty
Přispěvatel: Yontalcar 22 Října 2009, 21:27:18
Keď zabudnem syntax
cd /etc/init.d/
grep case *
otvorím si niektorý script a pozriem ako sa používa príkaz v praxi.
uff, to už bych řekl, že je jednodušší man bash, zmáčknout "/" pro vyhledávání, napsat "case" a pak párkrát zmáčknout "n" na vyhledání další položky, dokud nebudu tam, kde chci být

btw. k tvému skriptu:
a) když komprimuješ jednotlivé soubory, nepoužívej archivátory jako tar, cpio, 7z... ale komprimační utility jako gzip, bzip2 nebo lzma
b) samostatná PDF nejdou zkomprimovat, pokud na nich chceš ušetřit místo, musíš jich dát několik do archivu a ten potom zkomprimovat (.tar.gz, tzv. solid archiv)

pause neexistuje
read -n 1 -p "Press any key to continue"
ještě by to chtělo přidat -s, aby se nezobrazovalo, co zmáčkl (a ještě by bylo vhodné za to hodit něco, co vypíše nový řádek)
Název: Re: pokusné scripty
Přispěvatel: webhope 22 Října 2009, 21:33:38
ještě by to chtělo přidat -s, aby se nezobrazovalo, co zmáčkl (a ještě by bylo vhodné za to hodit něco, co vypíše nový řádek)

read --help nevypisuje volbu -s
Název: Re: pokusné scripty
Přispěvatel: Yontalcar 22 Října 2009, 21:42:10
@webhope
uff
Přečetl sis nějaký ten návod? Docela o tom pochybuju.
Přečti si http://docs.linux.cz/programming/interpreted/bashdoc-1.4/ (http://docs.linux.cz/programming/interpreted/bashdoc-1.4/) a pak to zkus znova  ;)

read --help nevypisuje volbu -s
Opravdu?
Kód: [Vybrat]
$ help read
read: read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
    Read a line from the standard input and split it into fields.                                       

    Reads a single line from the standard input, or from file descriptor FD
    if the -u option is supplied.  The line is split into fields as with word
    splitting, and the first word is assigned to the first NAME, the second 
    word to the second NAME, and so on, with any leftover words assigned to 
    the last NAME.  Only the characters found in $IFS are recognized as word
    delimiters.                                                             

    If no NAMEs are supplied, the line read is stored in the REPLY variable.

    Options:
      -a array  assign the words read to sequential indices of the array
                variable ARRAY, starting at zero                       
      -d delim  continue until the first character of DELIM is read, rather
                than newline                                               
      -e                use Readline to obtain the line in an interactive shell
      -i text   Use TEXT as the initial text for Readline                     
      -n nchars return after reading NCHARS characters rather than waiting     
                for a newline                                                 
      -p prompt output the string PROMPT without a trailing newline before     
                attempting to read                                             
      -r                do not allow backslashes to escape any characters     
      -s                do not echo input coming from a terminal               
      -t timeout        time out and return failure if a complete line of input is
                not read withint TIMEOUT seconds.  The value of the TMOUT         
                variable is the default timeout.  TIMEOUT may be a               
                fractional number.  If TIMEOUT is 0, read returns success only   
                if input is available on the specified file descriptor.  The     
                exit status is greater than 128 if the timeout is exceeded       
      -u fd             read from file descriptor FD instead of the standard input

    Exit Status:
    The return code is zero, unless end-of-file is encountered, read times out,
    or an invalid file descriptor is supplied as the argument to -u.
Název: Re: pokusné scripty
Přispěvatel: MacHala 22 Října 2009, 21:45:18
pause neexistuje
read -n 1 -p "Press any key to continue"
proc jsi mu to rikal? webhope si mohl udelat zabavny vecer pri reseni moji hadanky  ;)
Název: Re: pokusné scripty
Přispěvatel: webhope 22 Října 2009, 21:50:24
@webhope
uff
Přečetl sis nějaký ten návod? Docela o tom pochybuju.

tak místo break měl být exit a zapoměl jsem ukončit blok s podmínkou. Ale porovnávací operátory tam nejsou a já potřebuji zjistit, zda je proměnná $B nastavena (jeslti stiskl klávesu)
Název: Re: pokusné scripty
Přispěvatel: Yontalcar 22 Října 2009, 21:56:46
tak místo break měl být exit a zapoměl jsem ukončit blok s podmínkou. Ale porovnávací operátory tam nejsou a já potřebuji zjistit, zda je proměnná $B nastavena (jeslti stiskl klávesu)
http://docs.linux.cz/programming/interpreted/bashdoc-1.4/bashs6.html (http://docs.linux.cz/programming/interpreted/bashdoc-1.4/bashs6.html)
Přečti si to. Celý. Alespoň zběžně.
Název: Re: pokusné scripty
Přispěvatel: webhope 22 Října 2009, 21:59:42
díval jsem se na to.

EDIT:
Tak jak to má být
"$B"!=null
?
Název: Re: pokusné scripty
Přispěvatel: MacHala 22 Října 2009, 22:00:17
hm ted jsem si ten "skript" prosel a jak koukam, na tu fci untar, tak se mi zda, ze se chystas kompilovat, takze bych rekl , ze bys zaslouzil za usi :D - nejen proto, ze sis poradne neprecetl manual, ale nemohl jsi cist ani wiki , takze neznas zaklady instalace programu (ano, je tu moznost, ze jsi proste masochista a bezduvodna kompilace te bavi, ale to nepredpokladam...)
Název: Re: pokusné scripty
Přispěvatel: webhope 22 Října 2009, 22:06:45
hm ted jsem si ten "skript" prosel a jak koukam, na tu fci untar, tak se mi zda, ze se chystas kompilovat...)

Teď by mě zajímalo co nazýváš kompilací; kompilací chápu převádět zdrojový kód programu na binární data. Pokud jsi však myslel scriptování či prostě programátorské struktury, tak jo, na to jsem zvyklý; jsem zvyklý zjednodušovat věci pokud to jde. No přece nebudu ten dlouhý příkaz s "press a key" dávat samostatně  :)

EDIT:
Jinak ta wiki je dost dlouhá a vzhledem k tomu, že jsem původně chtěl pouze nainstalovat Kubuntu a grub, abych mohl rozjet operační systémy na druhém harddisku, my stačí pouze zběžné informace. Zatím. Časem se do toho určitě prokouši více. Ale víš, jak nemůže být vše najednou. Navíc je už pokročilá hodina.
Název: Re: pokusné scripty
Přispěvatel: MacHala 22 Října 2009, 22:12:27
mluvil jsem o tom, ze ve skriptu rozbalujes zdrojove kody programu, coz zpravidla byva predehra k jejich kompilovani a nasledne instalaci - nepredpokladam, ze napr. pro ucel prohlizeni zdrojaku bys to vkladal i do instalacniho skriptu
Název: Re: pokusné scripty
Přispěvatel: webhope 22 Října 2009, 22:16:40
Jak zdrojáky?

EDIT: takže tary vždy obsahují zdrojáky? Mám hledat koncovky .deb vždy?

Tos mě nepotěšil, že musím znovu hledat. Mám jich tam asi tak 8-10.

Jsem si chtěl dneska aspoň Mozillu 2 nainstalovat, ale už jsem unavedný nemám sílu to hledat. Konqueror mi dělá potíže, některé stránky sotva zvládá načíst anebo při zavírání některých oken havaruje.

Já už končím, dík za pomoc, a zatím sem můžete hodit odkaz jak zpracovat ty parametry (jestli o nějakém víte).
Název: Re: pokusné scripty
Přispěvatel: nettezzaumana 22 Října 2009, 22:26:56
Jsem si chtěl dneska aspoň Mozillu 2 nainstalovat, ale už jsem unavedný nemám sílu to hledat.
.. hm. to je dost potupne ztratit silu prazdnym tlachanim a spekulovanim, misto aby jsi si precetl ten podelanej manual, zvlaste je-li pravda, ze bys na to rad prisel.

jen tak dal hochu ;)

ad.1) neodvolavej se prosim na tve davne hratky se skriptovanim, pokud vubec nejake byly, tak stejne v soucasne dobe *jako *by *nebyly ..
Název: Re: pokusné scripty
Přispěvatel: webhope 22 Října 2009, 22:45:52
.. hm. to je dost potupne ztratit silu prazdnym tlachanim a spekulovanim, misto aby jsi si precetl ten podelanej manual, zvlaste je-li pravda, ze bys na to rad prisel.

Možná se ti to bude zdát divné, ale já na ten manuál nespěchám, mám k tomu svoje důvody, neočekávám, ale že bys je chápal, takže se ti svěřovat nebudu. Nakonec, proč si nepokecat, že?
Název: Re: pokusné scripty
Přispěvatel: MacHala 22 Října 2009, 23:27:46
EDIT: takže tary vždy obsahují zdrojáky? Mám hledat koncovky .deb vždy?
Tos mě nepotěšil, že musím znovu hledat. Mám jich tam asi tak 8-10.
opet odpovim svou vlastni citaci:
... ale nemohl jsi cist ani wiki , takze neznas zaklady instalace programu ...
doufam, ze v tomhle pripade uz uhadnes na poprve, co bys mel delat...

ad zpracovani parametru: Yontalcar uz ti jeden odkaz daval a ty jsi psal, ze jsi se na to dival (coz byla zajiste pravdiva odpoved, ale Yontalcar ti psal abys to precetl, ne aby ses podival jak vypadaji ty pismenka co tam jsou)...
Název: Re: pokusné scripty
Přispěvatel: nettezzaumana 23 Října 2009, 05:54:52
hehe. z mac MacHaly jeste jednou neco bude :D cituje sam sebe a to se mi libi ..
Název: Re: pokusné scripty
Přispěvatel: qUAKER 23 Října 2009, 15:12:02
hehe. z mac MacHaly jeste jednou neco bude :D cituje sam sebe a to se mi libi ..

třebas druhý Ntz? 8)

;D
Název: Re: pokusné scripty
Přispěvatel: MacHala 23 Října 2009, 15:54:37
hehe. z mac MacHaly jeste jednou neco bude :D cituje sam sebe a to se mi libi ..
třebas druhý Ntz? 8)
;D
ne, pak o sobe zacnu mluvit ve treti osobe  ;D