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: pokusné scripty  (Přečteno 4242 krát)

webhope

  • Návštěvník
  • *
  • Příspěvků: 94
    • Zobrazit profil
pokusné scripty
« kdy: 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í.
« Poslední změna: 22 Října 2009, 13:54:00 od webhope »

webhope

  • Návštěvník
  • *
  • Příspěvků: 94
    • Zobrazit profil
Re: pokusné scripty
« Odpověď #1 kdy: 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?
« Poslední změna: 22 Října 2009, 13:56:28 od webhope »

MacHala

  • Závislák
  • ****
  • Příspěvků: 1104
  • Big Bro iz watching joo!
    • Zobrazit profil
    • ZlejT
Re: pokusné scripty
« Odpověď #2 kdy: 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
Prislusnik ligy, za kreativni pouzivani interpunkcnich znamenek, carek, predevsim.
=======================================
Tweetuju jako http://twitter.com/zl8

webhope

  • Návštěvník
  • *
  • Příspěvků: 94
    • Zobrazit profil
Re: pokusné scripty
« Odpověď #3 kdy: 22 Října 2009, 13:59:22 »

line 2: 1000: No such file or directory

webhope

  • Návštěvník
  • *
  • Příspěvků: 94
    • Zobrazit profil
Re: pokusné scripty
« Odpověď #4 kdy: 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))

MacHala

  • Závislák
  • ****
  • Příspěvků: 1104
  • Big Bro iz watching joo!
    • Zobrazit profil
    • ZlejT
Re: pokusné scripty
« Odpověď #5 kdy: 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
Prislusnik ligy, za kreativni pouzivani interpunkcnich znamenek, carek, predevsim.
=======================================
Tweetuju jako http://twitter.com/zl8

webhope

  • Návštěvník
  • *
  • Příspěvků: 94
    • Zobrazit profil
Re: pokusné scripty
« Odpověď #6 kdy: 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'

MacHala

  • Závislák
  • ****
  • Příspěvků: 1104
  • Big Bro iz watching joo!
    • Zobrazit profil
    • ZlejT
Re: pokusné scripty
« Odpověď #7 kdy: 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)
Prislusnik ligy, za kreativni pouzivani interpunkcnich znamenek, carek, predevsim.
=======================================
Tweetuju jako http://twitter.com/zl8

webhope

  • Návštěvník
  • *
  • Příspěvků: 94
    • Zobrazit profil
Re: pokusné scripty
« Odpověď #8 kdy: 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

MacHala

  • Závislák
  • ****
  • Příspěvků: 1104
  • Big Bro iz watching joo!
    • Zobrazit profil
    • ZlejT
Re: pokusné scripty
« Odpověď #9 kdy: 22 Října 2009, 16:12:48 »
co s funkcemi?
v bashi vypada fce ala
Citace
funkce() {
return 0
}
Prislusnik ligy, za kreativni pouzivani interpunkcnich znamenek, carek, predevsim.
=======================================
Tweetuju jako http://twitter.com/zl8

webhope

  • Návštěvník
  • *
  • Příspěvků: 94
    • Zobrazit profil
Re: pokusné scripty
« Odpověď #10 kdy: 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é?

Yontalcar

  • Stálý člen
  • ***
  • Příspěvků: 833
  • Semper fidelis
    • Zobrazit profil
Re: pokusné scripty
« Odpověď #11 kdy: 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/
« Poslední změna: 22 Října 2009, 17:31:50 od Yontalcar »
NB: ASUS X53U - AMD Brazos E450; Debian GNU/Linux Sid amd64 (KDE 4.14)
Jen dvě věci jsou nekonečné - vesmír a lidská hloupost. Tím prvním si ovšem nejsem tak jist. - Albert Einstein

webhope

  • Návštěvník
  • *
  • Příspěvků: 94
    • Zobrazit profil
Re: pokusné scripty
« Odpověď #12 kdy: 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ě.

fish

  • Člen
  • **
  • Příspěvků: 307
    • Zobrazit profil
Re: pokusné scripty
« Odpověď #13 kdy: 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
« Poslední změna: 22 Října 2009, 19:10:50 od fish »
Acer Aspire 5738ZG/Intel T4400/ATI MR HD 4650/4GB RAM :: Ubuntu 10.04 64bit/Kbuntu 10.10 64bit/Win7 HP 64bit

webhope

  • Návštěvník
  • *
  • Příspěvků: 94
    • Zobrazit profil
Re: pokusné scripty
« Odpověď #14 kdy: 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é.

webhope

  • Návštěvník
  • *
  • Příspěvků: 94
    • Zobrazit profil
Re: pokusné scripty
« Odpověď #15 kdy: 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?)
« Poslední změna: 22 Října 2009, 20:26:15 od webhope »

fish

  • Člen
  • **
  • Příspěvků: 307
    • Zobrazit profil
Re: pokusné scripty
« Odpověď #16 kdy: 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
« Poslední změna: 22 Října 2009, 20:47:03 od fish »
Acer Aspire 5738ZG/Intel T4400/ATI MR HD 4650/4GB RAM :: Ubuntu 10.04 64bit/Kbuntu 10.10 64bit/Win7 HP 64bit

MacHala

  • Závislák
  • ****
  • Příspěvků: 1104
  • Big Bro iz watching joo!
    • Zobrazit profil
    • ZlejT
Re: pokusné scripty
« Odpověď #17 kdy: 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?
Prislusnik ligy, za kreativni pouzivani interpunkcnich znamenek, carek, predevsim.
=======================================
Tweetuju jako http://twitter.com/zl8

webhope

  • Návštěvník
  • *
  • Příspěvků: 94
    • Zobrazit profil
Re: pokusné scripty
« Odpověď #18 kdy: 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

MacHala

  • Závislák
  • ****
  • Příspěvků: 1104
  • Big Bro iz watching joo!
    • Zobrazit profil
    • ZlejT
Re: pokusné scripty
« Odpověď #19 kdy: 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...
Prislusnik ligy, za kreativni pouzivani interpunkcnich znamenek, carek, predevsim.
=======================================
Tweetuju jako http://twitter.com/zl8

fish

  • Člen
  • **
  • Příspěvků: 307
    • Zobrazit profil
Re: pokusné scripty
« Odpověď #20 kdy: 22 Října 2009, 21:11:56 »
pause neexistuje
read -n 1 -p "Press any key to continue"
Acer Aspire 5738ZG/Intel T4400/ATI MR HD 4650/4GB RAM :: Ubuntu 10.04 64bit/Kbuntu 10.10 64bit/Win7 HP 64bit

webhope

  • Návštěvník
  • *
  • Příspěvků: 94
    • Zobrazit profil
Re: pokusné scripty
« Odpověď #21 kdy: 22 Října 2009, 21:16:12 »
pause neexistuje
read -n 1 -p "Press any key to continue"

trochu složité, ale geniální  :)

webhope

  • Návštěvník
  • *
  • Příspěvků: 94
    • Zobrazit profil
Re: pokusné scripty
« Odpověď #22 kdy: 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()
« Poslední změna: 22 Října 2009, 21:53:29 od webhope »

Yontalcar

  • Stálý člen
  • ***
  • Příspěvků: 833
  • Semper fidelis
    • Zobrazit profil
Re: pokusné scripty
« Odpověď #23 kdy: 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)
NB: ASUS X53U - AMD Brazos E450; Debian GNU/Linux Sid amd64 (KDE 4.14)
Jen dvě věci jsou nekonečné - vesmír a lidská hloupost. Tím prvním si ovšem nejsem tak jist. - Albert Einstein

webhope

  • Návštěvník
  • *
  • Příspěvků: 94
    • Zobrazit profil
Re: pokusné scripty
« Odpověď #24 kdy: 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

 


Provoz zaštiťuje spolek OpenAlt.