Sziasztok!
~# cat szamlalo.sh
#!/bin/bash
for i in 0 .. 8;do
if feltétel;
then
done
else
{
műveletek
done
}
exit 0
~#bash szamlalo.sh
szamlalo.sh: line 5: szintaktikai hiba a váratlan done vezérjel körül
szamlalo.sh: line 5: ` done'
Nem tetszik neki a feltétel után a done :'( Goto kéne, de úgy tudom az itt nincs. Ötleteket szeretnék kérni, ki hogyan oldaná meg ezt?
Előre is köszönöm
Szerk
A megoldás:
#!/bin/bash
mkdir -p /tmp/nyomtato_szamlalo/
#nyomtatók ipcímei
CIM[0]=10.0.1.143
CIM[1]=10.0.1.147
CIM[2]=10.0.1.165
CIM[3]=10.0.1.13
CIM[4]=10.0.1.17
CIM[5]=10.0.1.200
CIM[6]=10.0.1.202
CIM[7]=10.0.1.64
CIM[8]=10.0.1.65
for i in 0 1 2 3 4 5 6 7 8 ; do
cd /tmp/nyomtato_szamlalo/
wget -d --output-file=/tmp/nyomtato_szamlalo/${CIM[$i]}.log --output-document=/tmp/nyomtato_szamlalo/oldal${CIM[$i]}.txt http://${CIM[$i]}/web/guest$
if [ $? != 0 ];
then
#wget sikertelen
continue
else
#wget sikeres
- 2053 megtekintés
Hozzászólások
egyébként így fest a script nálam:
CIM[1]=ipcím
...
CIM[8]=ipcím
for i in 0 ..8 ; do
cd /tmp/nyomtato_szamlalo/
wget -d --output-file=/tmp/nyomtato_szamlalo/${CIM[$i]}.log --output-document=/tmp/nyomtato_szamlalo/oldal${CIM[$i]}.txt http://${CIM[$i]}/web/guest.cgi
grep 'HTTP/1.0 200 OK' ${CIM[$i]}.log >mylog.txt;
FILESIZE=$(stat -c%s mylog.txt)
if [ $FILESIZE = 0 ];
then
done
else
...
done
fi
exit 0
Tehát igazából azt szeretném tesztelni, hogy sikeres volt e a wget letöltés vagy sem, csak ilyen paraszt módszert találtam ki.
- A hozzászóláshoz be kell jelentkezni
code tag-eket pls!
amúgy break és continue nem segítene rajtad?
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
bocsi láma vagyok, mi az a code tag? írjam oda minden sorhoz, hogy mit miért csinál?
Köszi a tippet, lehet jó lesz a break és a continue, most lesem mire valók.
- A hozzászóláshoz be kell jelentkezni
Nem. A hozzászólásoknál
[code]
és
[/code] tagek közzé szúrd be a programot.
-----
"Ember embernek farkasa." Ezért aztán "Holló a hollónak nem vájja ki a szemét."
- A hozzászóláshoz be kell jelentkezni
#!/bin/bash
mkdir -p /tmp/nyomtato_szamlalo/
#nyomtatók ipcímei
CIM[0]=10.0.1.143
CIM[1]=10.0.1.147
CIM[2]=10.0.1.165
CIM[3]=10.0.1.13
CIM[4]=10.0.1.17
CIM[5]=10.0.1.200
CIM[6]=10.0.1.202
CIM[7]=10.0.1.64
CIM[8]=10.0.1.65
for i in 0 1 2 3 4 5 6 7 8 ; do
#for i in 0 ; do
cd /tmp/nyomtato_szamlalo/
wget -d --output-file=/tmp/nyomtato_szamlalo/${CIM[$i]}.log --output-document=/tmp/nyomtato_szamlalo/oldal${CIM[$i]}.txt http://${CIM[$i]}/web/guest$
#grep 'HTTP/1.0 200 OK' ${CIM[$i]}.log >mylog.txt;
#FILESIZE=$(stat -c%s mylog.txt)
#if [ $FILESIZE = 0 ];
# then
# done
# else
...
done
fi
exit 0
- A hozzászóláshoz be kell jelentkezni
> Tehát igazából azt szeretném tesztelni, hogy sikeres volt e a wget letöltés vagy sem, csak ilyen paraszt módszert találtam ki.
Arra elég a wget visszatérési értékét ellenőrzni pl így:
wget $params $stuff
if [ $? != 0 ]; then
echo "Error"
else
echo "Download success!"
fi
- A hozzászóláshoz be kell jelentkezni
tudtam, hogy paraszt módszerrel csinálom.
Köszi ez jól néz ki, csak én nem echo "Error" akarok kiírni hanem folytatni a for ciklust a következő i vel, remélem erre lesz jó ez a break és continue, csak még nem vágom mire valóak.
- A hozzászóláshoz be kell jelentkezni
for i in `seq 0 8` ; do
…
if [ -s mylog.txt ] ; then
#létezik és nem nulla méretű a mylog.txt
…
continue
else
#nem létezik vagy null a mérete
…
continue
fi
done
Kiegészítés: Ha a
fi
és
done
között nem csinálsz semmit, akkor a continue sem kell. Az ott lévő dolgokat „ugorná át” a continue hatására.
-----
"Ember embernek farkasa." Ezért aztán "Holló a hollónak nem vájja ki a szemét."
- A hozzászóláshoz be kell jelentkezni
Köszi, igen a continue-re volt szöükségem.
- A hozzászóláshoz be kell jelentkezni
Ilyesmit szeretnél ha jól értem:
CIM=( ip1 ip2 ip3 ip4 )
for ip in ${CIM[@]}
do
cd /tmp/nyomtato_szamlalo/
res=`wget -d --output-file=/tmp/nyomtato_szamlalo/$ip.log --output-document=/tmp /nyomtato_szamlalo/oldal$ip.txt http://$ip/web/guest.cgi`
if [ "$res" =~ "*HTTP/1.0 200 OK*" ];
then
...
fi
done
exit 0
(A minta illesztésben nem vagyok biztos (=~ utáni rész), ezt majd a többiek javítják.
- A hozzászóláshoz be kell jelentkezni
köszi, ebből is tanultam :)
- A hozzászóláshoz be kell jelentkezni
Ha így csinálom ezt kapom
line 18: 10.0.1.143: syntax error: invalid arithmetic operator (error token is ".0.1.143")
line 18:
sorban van a wget ...
(error token is ".0.1.143")
a legelső ipcím ahonnan letöltök 10.0.1.143
Ígyhát maradok a réginél az működik és még nem kényelmetlen.
- A hozzászóláshoz be kell jelentkezni
Ehh... szerintem de a 'done' helyett 'fi' -t kellene hogy használj, és csak egy 'done' -nak kellene lennie a for lezárására.
- A hozzászóláshoz be kell jelentkezni
köszi ezt is megnézem.
- A hozzászóláshoz be kell jelentkezni
így próbáltam , nem nyert
CIM[7]=10.0.1.64
CIM[8]=10.0.1.65
for i in 7 8 ; do
cd /tmp/nyomtato_szamlalo/
wget -d --output-file=/tmp/nyomtato_szamlalo/${CIM[$i]}.log --output-document=/tmp/nyomtato_szamlalo/oldal${CIM[$i]}.txt http://${CIM[$i]}/web/guest$
if [ $? != 0 ];
then
fi
else
műveletek
fi
done
eredmény:
szamlalo.sh: line 8: szintaktikai hiba a váratlan fi vezérjel körül
szamlalo.sh: line 8: ` fi'
- A hozzászóláshoz be kell jelentkezni
Ha más módon tesztelsz, akkor nem kell
else
ág sem.
if [ -s /tmp/…/${CIM[$i]}.txt ]
# a fájl mérete nagyobb nullánál
műveletek
fi
Kieg.: A hiba azért volt, mert a
fi
az
if
-hez tartozik, így csak a legvégén kell.
-----
"Ember embernek farkasa." Ezért aztán "Holló a hollónak nem vájja ki a szemét."
- A hozzászóláshoz be kell jelentkezni
így tesztelem, mert így file sem kell
wget ....
if [ $? != 0 ]; then
#a letöltés nem fasza
else
#a letöltés fasza
fi
de mindjárt beteszem a topik tetejére
- A hozzászóláshoz be kell jelentkezni
break és continue
* Én egy indián vagyok. Minden indián hazudik.
- A hozzászóláshoz be kell jelentkezni
Amúgy mi az a for i in 0 .. 8; do? Ennek az elemei:
0
..
8
Gondolom, ezt akartad:
for i in `seq 0 8`; do
vagy
for ((i=0; i<9; i++)); do
tr [:lower:] [:upper:] <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
igen köszi, az eredetibe felsoroltam a számokat 0 1 2 3 4 5 6 7 8, de itt lusta voltam :)
- A hozzászóláshoz be kell jelentkezni
Nem lehetetlen, kis kozmetikával:
for i in {0..8}; do ...
- A hozzászóláshoz be kell jelentkezni
köszi, LOL pedig nem is tudtam :)
- A hozzászóláshoz be kell jelentkezni