Debian - skript v terminálu

Od: Datum: 15.12.13 09:23 odpovědí: 15 změna: 15.12.13 14:11

Zdravím, mám napsat skript v terminálu v Debianu:

Zadání: Napište skript, který uskuteční 4 x ping na vzdálené servre, které budu specifikované v textovém souboru, každý na novém řádku. Cestu k tomuto souboru zadá uživatel. Součástí řešení nech je kontrola platnosti cesty a textová informace o probíhané činnosti.

Mé prozatimní řešení je na obrázku. Jak dál, co mi tam chybí a tak, aby to fungovalo? Prý tam mám doplnit ještě zacylení či co před ten příkaz while, ale netuším co a jak.

Navíc jak zadám název(či cestu k souboru), tak to neprojde tím IFem - nejde číst...mám to ve složce home/lukas/lukas a jmenuje se to servery.txt

Díky moc za rady!



Seznam odpovědí:
 
moment čekejte prosím, probíhá přenos dat...
Zobrazení struktury odpovědí v otázce
Skrytí struktury odpovědí v otázce
Zobrazení struktury odpovědí v otázce

 

Odpovědi na otázku:
Od: nufan
Datum: 15.12.13 09:24

*zacyklení

Od: luke237
Datum: 15.12.13 09:40
Spise nez "zacyleni" nebo "zacykleni" by to melo byt "zacileni", tedy prirazeni zdroje, ze ktereho ten read cte. Bez parametru cte ze standardniho vstupu a protoze ten nemas presmerovany, tak u tebe je to porad /dev/stdin (nejcasteji klavesnice).
Ohodnoceno: 0x
 
Od: luke237
Datum: 15.12.13 09:44
Na promennou se musis odkazovat "$promenna" (tedy if ! -f $soubor), stejne jako to mas pro $line v te while smycce.
Ohodnoceno: 0x
 
Od: luke237
Datum: 15.12.13 09:46

Pro kontrolu si dam muzes dat testovaci vypisy (echo $soubor, echo $line, ...).

Opravdu si precti ten manual k Bashi!

Ohodnoceno: 0x
 
Od: luke237
Datum: 15.12.13 09:54
Myslim, ze uz jsem to psal posledne, ze se nejedna o skript v terminalu Debianu, ale o Bash skript. S Debianem to nema nic spolecneho. Stejne tak vyraz "psat neco v terminalu" je nejaky divny. Vubec mi to nejde pres jazyk. *ee* Lidi by spise rekly: "Napiste v shellu skript ...".
Ohodnoceno: 0x
 
Od: nufan
Datum: 15.12.13 10:16

Jasně, ale toto teď neřeším, potřebuju to mít hlavně správně, tlačí mně termín. Před proměnnou jsem dal tedy $ a teď skript spustím a chci do něj načíst ten soubor, se kterým má pracovat. Napíše u řádku 6 příkaz nenalezen. Jak to teda udělat?

Potřebuju aby ten soubor nebo cestu k němu zadával uživatel. Tak jak to upravit? Prosím o radu! Manuál nestíhám číst.

Od: luke237
Datum: 15.12.13 11:07
apíše u řádku 6 příkaz nenalezen

Za "if" musi byt hranate zavorky a ne kulate.

Ohodnoceno: 0x
 
Od: nufan
Datum: 15.12.13 11:27

Aha...a to mi prosím napsal cvičící :-D

Závorky jsem opravil a spustil skript...jak se zadává tedy ta cesta? napsal jsem název souboru (což je asi kravina že?) a nic z toho - viz. obrázek.

Od: lue237
Datum: 15.12.13 11:53

Vzdyt ti to pise, ze ti tam na konci chybi hranata zavorka.

Me to tady normalne funguje: if [ ! -f $soubor ] then ...

Ohodnoceno: 0x
 
Od: nufan
Datum: 15.12.13 12:02

Píše, ale ony tam jsou obě závorky, tak já nvm. Teď už to funguje, ale ještě ne tak jak má (viz obrázek).

Co tam mám pořád blbě? To nenačte ty adresy z toho souboru servery.txt (viz 2. obrázek)?

Od: luke237
Datum: 15.12.13 12:11

Zase ti dam stejnou radu jako v predchozim prispevku - cti, co ti Bash pise! Pise ti: "4x ping na adrese:" a uz ti pak nic nevypisuje, tedy promenna line je prazdna. Musis si udelat to presmerovani vstupu, jak jsem psal nekde uplne na zacatku.

Na Internetu si najdi priklady na pouzivani "read" v Bash a u spousty z nich je to resene i pro cteni ze souboru (tedy je tam udelano i to presmerovavani).

Ohodnoceno: 0x
 
Od: nufan
Datum: 15.12.13 12:32

Ty to přesměrování asi nevíš, co? Hledám to všude možně, ale nerozumím tomu na takové úrovni abych to zkutil.

Každopádně díky moc, je to velká pomoc i takto!

Od: luke237
Datum: 15.12.13 12:47
Szmorejme ze to vim, ale nechci ti to tady cele psat. Ja si to tady cvicne na tech 5 radku napsal a funguje mi to :) Jestli se ti nechce hledat to presmerovani, tak ti prozradim, ze asi nejjednodussi je to udelat takhle: while ... done <$soubor
Ohodnoceno: 0x
 
Od: luke237
Datum: 15.12.13 12:49
  1. while read line;
  2. do
  3. echo "4x ping na adresu: $line"
  4. ping -c 4 $line
  5. done < $soubor
Vsimni si take nazvu parametru za prikazem ping.
Ohodnoceno: 0x
 
Od: nufan
Datum: 15.12.13 14:11

D Ě K U J I M O C K R Á T!

 

 

 

 

Přihlásit se k odběru odpovědí z této otázky:

Neneseme odpovědnost za správnost informací a za škodu vzniklou jejich využitím. Jednotlivé odpovědi vyjadřují názory jejich autorů a nemusí se shodovat s názorem provozovatele poradny Poradte.cz

 
Copyright © 2004-2016 Poradna Poradte.cz. Všechna práva na poradně Poradte.cz vyhrazena.