Portál AbcLinuxu, 16. května 2024 09:31


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Diskuse byla administrátory uzamčena.

7.11.2003 09:35 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Bludy
Článek je sice pro začátečníky, ale bludy by se v něm vyskytovat neměly... Předně proměnné nejsou jen jednoho typu, a to i když nepočítám pole za samostatný typ. Bash zná celočíselné proměnné, deklarované declare -i proměnná.
$ declare -i a b
$ a=10; echo $a
10
$ b=asdgsdg; echo $b
0
$ b="a+3*3"; echo $b
19
Vidíme, že integerové proměnné mají zajímavou vlastnost, že se na nich při přiřazení provádí aritmetická expanse -- je to IMHO čitelnější než $((...)). Dále proměnná USER není žádná vnitřní proměnná shellu a LANG bych také neuváděl zrovna jako příklad vnitřní proměnné shellu, protože shell sám ji používá snad jen v lokalizovaných skriptech -- a ten jsem ještě žádný neviděl ;-)
if výraz; then příkazy elif výraz; then příkazy else příkazy fi
potřebuje středníky (nebo konce řádků, to je jedno) i před else a fi.
7.11.2003 10:57 Maud Lebowski
Rozbalit Rozbalit vše Bludy
nerada, ale musim se sneznym muzem souhlasit, asi by tam mela byt zminka o environmentalnich promenych (jako je LANG) na ktere pripouizvani bashe hned narazite a nechapete oc jde
7.11.2003 18:08 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Bludy
no ja jen drobnost, že místo výraz bych tam rovnou napsal příkazy, protože tam můžou být libovolné příkazy a pracuje se s návratovým kódem posledního z nich.
if příkazy then příkazy elif příkazy then příkazy else příkazy fi
přičemž každý příkaz musí být zakončený středníkem.
if false;true; then echo OK; fi
což je vlastně stejné jako
false;true;if [ $? -eq 0 ];then echo OK;fi
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
7.11.2003 19:11 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše RE: Bludy
Děkuji za připomínky. 1. Proměné jsou jen jednoho datového typu ;-)) declare -i proměná pouze shellu říká, že má předpokládat celečíselnou hodnotu proměné a vyhodnotit jí jako aritmetický výraz. Není to, ale v žádném případě definice nového datového typu. Ve skutečnosti je to stále řetězec ke kterému se shell chová jako k číslu. $ a=1 $ b=2 $ declare -i c $ c="$a + $b" $ echo $c 3 $ d=$(($a + $b)) $ echo $d 3 2. Máte pravdu if výraz; then příkazy elif výraz; then příkazy else příkazy fi si každý může vyložit svým způsobem. Slovem příkazy jsem myslel příkaz1; příkaz2; příkaz3;
9.11.2003 02:25 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše RE: Bludy
Ad 1. To je jen takové žonglování se slovíčky. Můžeme samozřejmě říci, že pointer a float v C jsou tytéž datové typy, protože obojí jsou nějaké posloupnosti bajtů (např. čtveřice), jen se s jednou obvykle zachází jako s ukazatelem a s druhou jako s číslem v plovoucí řádové čárce... Nicméně, uživatele jazyka (zejména jazyka vyšší úrovně, jímž shell nepochybně je) naprosto nezajímá, jak jsou věci implementovány interně. Jsou-li proměnné x a y stejného datového typu, musí být možné provést následující přiřazení hodnotou (+ typové konverze)
y=type_of_y(x)
x=type_of_x(y)
a proměnná x musí mít tutéž hodnotu co na začátku -- což samozřejmě nefunguje, je-li y integer a x není. Pozn.: Napsal bych, že jde o podmínku nutnou, ale nikoli postačující, ovšem v praxi je to zamotanější, v obskurních jazycích jako C++ či Perl (Tie), se při přiřazení uživatelského typu může stát v podstatě cokoli, takže podmínku nezávislou na konkrétním typovém systému si nedokáži představit...
1.7.2009 18:31 Kaacz | skóre: 10 | Praha 4
Rozbalit Rozbalit vše Re: Bludy

S tím LANG je to právě naopak než si myslíte.

Právě proto, abyste měl jasně definovaný jazyk výstupů příkazů a aplikací pro následné parsování ve skriptu, je vhodné si na počátku skriptu nastavit LANG=C.

V dnešní době používání linuxu na desktopu s jazykem jiným než EN to dělám zcela běžně.

Jsem uz moc stary na pouzivani windows .. / Optimismus je jen nedostatek informaci ..
7.11.2003 10:33 David | skóre: 21 | Praha
Rozbalit Rozbalit vše Díky
Připomínka od Yetiho na místě - souhlasím. Ale rád bych poděkoval autorovi, že se okrádá o svůj čas a píše tento seriál. Čtu ho rád a leccos se přiučím. Díky David.
8.11.2003 04:54 dany
Rozbalit Rozbalit vše krajsi for
stalo by za to uviest for aj trochu inak. predsa len vymenovat vsetky moznosti je blbost, ked ide o cisla, medzi ktorymi je jasny vztah :)
for ((i=10;i<=100;i=i+10)); do 
  echo $i; 
done
9.11.2003 02:32 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše krajsi for
to dost závisí na tom, jestli a jak se ta množina čísel může v budoucnu měnit -- for-cyklus je rozhodně méně čitelný než např.
for cislo in {1,2,3,4,5,6,7,8,9,10}0; do
  echo $cislo
done
což je vůbec má oblíbená metoda vytváření seznamů...
10.11.2003 21:06 Michal Fikera
Rozbalit Rozbalit vše krajsi for
Moje oblibena metoda je for i in `seq 10 10 100`.
27.5.2008 11:42 pou | skóre: 18
Rozbalit Rozbalit vše Re: krajsi for
Ahoj, chci si udělat takovy jednoduchy skript, ktery pomoci acping zjisti MAC adresu. v promenne $MAC mam vzdy mac adresu nejakeho pc, kterou chci ulozit do souboru zk. Pokud spustim skript podruhe, potrebuju a by mac adresy kterou uz v souboru jsou se nezapsaly, a nove(ty ktere v souboru "zk" nejsou se do nej zapsaly. Myslel jsem ze by to mohlo vypadat nejak takto:

#!/bin/bash for ip_adresa in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16; do echo "testuje se adresa $ip_adresa" MAC=`arping -c 1 -I eth0 192.168.30.$ip_adresa | egrep -o '\[.*\]' | tr -d []` echo "promenna MAC je $MAC" if [ $MAC==cat /home/pou/Plocha/zk|grep $MAC]; then echo "adresa uz v souboru je" else $MAC >> /home/pou/Plocha/zk fi
27.5.2008 11:46 pou | skóre: 18
Rozbalit Rozbalit vše Re: krajsi for
Ahoj, chci si udělat takovy jednoduchy skript, ktery pomoci acping zjisti MAC adresu. v promenne $MAC mam vzdy mac adresu nejakeho pc, kterou chci ulozit do souboru zk. Pokud spustim skript podruhe, potrebuju a by mac adresy kterou uz v souboru jsou se nezapsaly, a nove(ty ktere v souboru "zk" nejsou se do nej zapsaly. Myslel jsem ze by to mohlo vypadat nejak takto:
#!/bin/bash for ip_adresa in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16; do
echo "testuje se adresa $ip_adresa"
MAC=`arping -c 1 -I eth0 192.168.30.$ip_adresa | egrep -o '\[.*\]' | tr -d []`
echo "promenna MAC je $MAC"
if [ $MAC==cat /home/pou/Plocha/zk|grep $MAC];
then echo "adresa uz v souboru je"
else
$MAC >> /home/pou/Plocha/zk
fi

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.