ha csak egész számokat kell ellenőrizni, akkor egy ilyen teszt jó lehet:
[ $1 -eq $1 ] 2> /dev/null
ha csak egész számokat kell ellenőrizni, akkor egy ilyen teszt jó lehet:
[ $1 -eq $1 ] 2> /dev/null
sürgősnek nem sürgős egyátalán, csak én elég kevés vagyok ehhez, nem nagyon tudok konkrétat kérdezni.
Köszönöm!
Muton#2316 - $z@r a drop >_<
Én a vbscriptet ajánlom, mert XP-től kezdve telepítened sem kell semmit hozzá, csak beírod parancssorba a script fájl nevét, és lefut.
***
nagy minusz a vb scriptre, gyulolom...
raadasul ugye nagyon durvan platformfuggo (eleve csak windows, raadasul a microsoft agybaszasai miatt egyes vindoz-verziok kozott sem kompatibilis)
Egy ilyen alapfeladatra teljesen jó, minden windows-on ugyanúgy fog futni. Az egy dolog, hogy te gyűlölöd, de még mindig a Windows a legelterjedtebb oprendszer, és ezért ajánlottam.
***
Elég sok adatról van szó, ráadásul sorok beszúrása csak új fájl létrehozásával lehetséges. És amíg egy feldolgozás folyamatban van, gondolom változhat az eredeti fájl tartalma is. Nem tudom, hogy a végső formátumot milyen program dolgozná fel illetve az adatokat mennyi ideig kellene tárolni. De első ránézésre lehet, hogy inkább adatbázisba pakolnám az értékeket aztán onnan csinálnék lekérdezéseket és a kimenetet meg aztán könnyedén lehetne formázni.
nem azert utalom, mert fuj microsoft meg fuj windows, hanem mert irtozatosakat szoptam vele, millioszor elofordult hogy a talalt megoldas nem mukoott, mert kiderult hogy 'ja igen, ez windows 2000-nel meg megvolt, aztan senki nem tudja miert, de a ms kivette, az xp-ben mar nem mukodik'
raadasul erre a feladatra semmi nem indokolja a vbs-t, szovegfeldolgozasra perl, esetleg awk kell
gyorsan osszedobtam egy ronda, de mukodo megoldast perlben az 1. problemara:
my ($MAX, $last, $lastline, @prevs) = (4, -1,"");
foreach (<>)
{
my $nr = (split(" ",$_))[2];
print substr($lastline,0,20).($last+1).substr($prevs[$last+1],21) if (!($nr == 0 && $last == $MAX) && ($nr != ($last+1)) && (defined $prevs[$last+1]));
$prevs[$last = $nr] = $lastline = $_;
print;
}
a hasznalata siman ennyi:
perl scriptedneve.pl < adatok.txt
ha uj file-ba akarod iranyitani, akkor:
perl scriptedneve.pl < adatok.txt > javitott.txt
[ Szerkesztve ]
meg akkor mar legyen teljes, a masodik feladatot megoldo script:
my $line = "";
foreach (<>)
{
my @val = split;
if ($val[2] == 0)
{
print "$line\n" if ($line ne "");
$line = substr($_,0,20).$val[-1];
}
elsif ($line ne "")
{
$line .= " $val[-1]";
}
}
print "$line\n";
hasznalata ertelemszeruen perl scriptedneve.pl <javitott.txt
vagy ha egyben akarod a kettot hasznalni:
perl lapa1.pl <data.txt | perl lapa2.pl
sot, ha POSIX-kompatibilis oprendszert hasznalsz (gyakorlatilag a windowson kivul barmi), akkor a script elejere biggyesztve a #!/usr/bin/perl -w sort es futtathato attributumot allitva, ennyi:
lapa1.pl < data.txt | lapa2.pl
huh, hát nagyon köszi. nemsoká belemélyedek.
erre a windows dologra ránéztem, de nincs a repóban:
root@inox:/home/lapa# apt-get install windows
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Couldn't find package windows
root@inox:/home/lapa#
ettől függetlenül vbs-ben megoldottam volna, ezekkel a junixos regulárokkal meg awk-kal nem vagyunk még összemelegedve. pedig a honlap asp-jét is migrálnom kéne már php-ba, ha jól értettem az nagyon hasonló a perlhez, pár idegesítő kivétellel.
ja, régen csináltam logon szkriptet vbs-ben, emlékszem én is valami kompatibilitási gondokra. asszem még olyan is volt, hogy xp-n futott, de 2003-on nem. na azon belilult nekem is a fejem, hiszen szegről-végről ugyanaz.
az inputot le tudom állítani, nem téma. azaz az eredeti fájl nem válozik feldolgozás közben. emiatt nem varázsolnék adatbázissal, de lehet, hogy idővel célszerűbb lenne.
igazából nógatom a digitemp fejlesztőjét (a forrás a digitemp kimenete), hogy csináljon olyan log formátumot, amit a gnuplot egyből szeret. ez szerintem elég generikus igény, tekintve, hogy "a" hőmérő meg "a" grafikon appokról van szó. szóval remélem megcsinálja idővel.
mint írtam mindjárt nekifutok és beszámolok az eredményekről.
[ Szerkesztve ]
az lehetséges, hogy az első megoldás a hiányzó 0-kat nem egészíti ki, csak az 1, 2, 3, 4-et? csak valami 80 sor plusz lett az eredetihez képest, pedig párezer 0-s hiányzik.
mire megnyitom és ellenőrzöm tételesen openoffice-ban a nap lemegy...
sajnos nem igazán értem mit csinál a szkripted. ami nem baj, csak nem tudom megnézni a választ a fenti kérdésre.
[ Szerkesztve ]
ehh, ezt megoldottam.
az utolsó kérésem az lenne, hogy az első scriptnek 5-ször kéne lefutnia. ez abból adódik, hogy néha nem csak 1 sor hiányzik.
nem izgat, hogy ötször tovább tart, de nekem hirtelen nem sikerült megfelelően for-next-et csinálni rá.
köszi és előre is.
[ Szerkesztve ]
hopp, most latom csak hogy irtal
biztos hogy otszor kene lefutnia, nem potolja ki akkor is ha egynel tobb sor hianyzik?
nem úgy tűnik.
no, hát úgy néz ki készen vagyok. meg ezzel a feladattal is. ilyen szép hőmérős bigyókat csináltak a scriptek nekem. még 10 mp-enkénti fogyasztásmérésem is lett így (fekete vonal), zsír.
mégegyszer nagyon köszönök minden segítséget.
ja, ezt az ismétlősdit elég parasztosan oldottam meg, átpipeoltam ötször ugyanazon a scripten. lefut így is 20 mp alatt, nem téma.
[ Szerkesztve ]
üdv. kb a következőt szeretném:
[ programkimenet | grep szöveg = <legalább egy sor> ] && echo blabla | mail -s "subject" email@host.tld
nem tudom hogyan számoltassak sort (szöveg előfordulást) vele, illetve hogy ilyen egysoros if-et bele lehet-e rakni crontabba. elképzelhetőnek tartom, hogy zárójel is kell a "then"-t befoglalni. jól gondolom?
köszi a segítséget.
Használd a wc-t a -l kapcsolóval, az a visszaadott sorokat megszámolja:
[ `programkimenet | grep szöveg | wc -l` -gt 0 ]
Szerintem használhatod crontabban is, a sor végéig nézi az utolsó mezőben a parancsot és akár több parancsot is meg lehet adni pontosvesszővel elválasztva.
[ Szerkesztve ]
köszönöm, ez jó lett. fejleszteném viszont egy kicsit. ez az eredeti:
[ `chkrootkit | grep infected | wc -l` -gt 0 ] && chkrootkit | mail -s "chkrootkit INFECTED" email@cim.hu
ez mint látható elég bénácska, mert ha a chkrootkit talált valami gonoszságot, akkor újra lefuttatja, csak hogy az emailbe rakjuk.
szóval szeretném a chkrootkit kimenetét elrakni egy változóba, hogy a feltétel teljesülésekor újra használhassam.
[ Szerkesztve ]
mktemp-pel csinálhatsz egy fájlt, abba belerakod a chkrootkit kimenetét és utána abból lehet dolgozni.
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Üdv,
lenne egy láma kérdésem...
Adott mappában rákeresek a legfrissebb fájlra($LATESTIMG) majd feltöltöm ftp-n; milyen paranccsal tudnám átírni a fájl nevét hogy a feltöltött fájl neve mondjuk mindig kep.jpg legyen és mindig írja felül az előzőleg feltöltött fájlt????
Segítségtekét előre is köszönöm!
meglévő script:
LATESTIMG=`cd $SOURCEDIR && ls -t1 $f | head -n1`
echo "Latest Image In This Folder: $LATESTIMG"
FILE="$LATESTIMG"
ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
put $FILE
quit
END_SCRIPT
exit 0
Túrista vagyok
Üdv kedves Guruk!
Volna egy buta kérdésem: hogy tudok olyan VBS (vagy bármilyen) scriptet kreálni, ami W7 alatt automatikusan kikapcsolja a UAC-t minden egyes login után?
Odáig eljutottam sendkeys módszerrel, hogy kinyitja a a UAC ablakot, de nem akarja beírni a felhasználónevet/jelszót.
Céges gépem van, és hiába kapcsolom ki, minden újra bejelentkezéskor visszaállítja a UAC-t a legmagasabb szintre.
Van local és domain admin jogom is.
Üdv és köszi
recreational nuclear physicist
lehet, hogy windowsos szaktopicban hamarabb kapsz tanácsot, ide a nagy linux topicból jöttünk
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Ezt nem tudtam, nincs kiírva sehova
recreational nuclear physicist
első hozzászólás megvolt?
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
A topic címe elég beszédes volt, de akkor húzok innen...
recreational nuclear physicist
hogyan tudok egy binaris file-hoz hozzafuzni egy null byte-ot?
amit probaltam, az az alabbi:
echo "\0" >> file
viszont ezzel ket problemam is van
egyreszt hozzafuzte a file vegehez a \0 string-et (egy backslash es egy 0 karakter), valamint emoge tett meg egy sortorest is (\n), igy 1 byte helyett harommal novelte meg a file meretet, mely 3 kozul egyik sem az, amire nekem szuksegem lett volna
Politikailag korrekt, valamint munkahely- és gyermekbarát aláírás, amiben egyáltalán nincsen p*na.
echo -ne '\0' >> file
Jester
Hi!
kosznom a valaszt
idokozben mar megoldottam maskent, de sajnos nem segitett a dolog
Udv: VladimirR
Politikailag korrekt, valamint munkahely- és gyermekbarát aláírás, amiben egyáltalán nincsen p*na.
Sziasztok, van egy szövegfájlom, abban szeretném azt megcsinálni, hogy soronként haladva átformázzam. (A TAB nincs igy kiirva benne, csak hogy tudjuk hogy ott van elválasztó karakter.)
"Wietmarschen"TAB"Lotte"
"Bissendorf"TAB"Gohfeld (Übergang A 30/B 61)"
És ezt kéne kapjam:
Wietmarschen,Lotte, , , , ,
Bissendorf,Gohfeld# (Uebergang A 30/B 61), , , , ,
Tehát a feladat, " jelek eltávolítása, TAB helyére vessző, Ü betűből Ue-t az ä betűből ae-t az első space elé egy #-et és a végére , , , , , (vessző space vessző space...
Valami awk-t emlegettek itt de ahhoz nem nagyon értek. Ha valakinek lenne ráérős ideje és megcsinálná nekem akkor hálás lennék.
Elég lenne egy parancssoros valami is ami beolvassa a txt-t megformázza és kiírja egy másikba.
Köszi.
(Milkacsoki sörfizetség? )
[ Szerkesztve ]
Plug and Pray... :)
#! /bin/bash
function do_field
{
tmp=${1//\"/}
tmp=${tmp//Ü/Ue}
tmp=${tmp//ä/ae}
tmp=${tmp/ /# }
echo $tmp
}
IFS=$'\t'
while read a b
do
a=$(do_field "$a")
b=$(do_field "$b")
echo "$a,$b, , , , ,"
done
MOD: ez egy "szűrő" vagyis standard inputról olvas, outputra ír. Tehát valahogy imígyen kell használni:
./script.sh <in.txt
Wietmarschen,Lotte, , , , ,
Bissendorf,Gohfeld# (Uebergang A 30/B 61), , , , ,
[ Szerkesztve ]
Jester
Köszönöm szépen.
Tudtam használni, azt csinálja amit kell:
így indítom el is készíti.
./script.sh <in.txt >out.txt
de ha olyanban tudnánk még finomítani, hogy
(átírtam így,)
tmp=${1//\"/}
tmp=${tmp//Ü/Ue}
tmp=${tmp//ü/ue}
tmp=${tmp//ä/ae}
tmp=${tmp//Ä/Ae}
tmp=${tmp/ /# }
echo $tmp
de sajnos nem tesz különbséget kicsi és nagybetű között, bele lehetne ezt is még tenni? (nem mindig a szó elején van a ü meg ä
Sör vagy milka?
Plug and Pray... :)
set completion-ignore-case on
Válaszolok magamnak nagyon köszi
Plug and Pray... :)
Üdv.
Ennek a kimenete az aktuális időjárás
curl --silent "http://xml.weather.yahoo.com/forecastrss?p=HUXX0008&u=c" | grep -E '(Current Conditions:|[A-Z]<BR)' | sed -e 's/Current Conditions://' -e 's/<data=>//' -e 's/<br \/>//' -e 's/<b>//' -e 's/<\/b>//' -e 's/<BR \/>//' -e 's/<description>//' -e 's/<\/description>//' -e 's/, [0-9]* [A-Z]//' | tail -n1
Pl: Fair, Partly cloudy stb.
A lényeg, hogy ezt a szót szeretném egy változóba írni és utána majd azt vizsgálni.
Mintha pl ezt csinálnám:
most="Fair"
most=$(katyvasz)
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
illetve (mivel a példa szerint többszavas is lehet az eredmény):
most="$(katyvasz)"
DRM is theft
Kösz, most már jó én csak simán idézőjelbe tettem.
nem látom a különbséget.
$ most=$(echo partly cloudy)
$ echo "---$most----"
---partly cloudy----
vagy
$ most="$(echo partly cloudy)"
$ echo "---$most----"
---partly cloudy----
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Hm, tényleg, a dollárzárójel egyben tartja a kifejezést.
[ Szerkesztve ]
DRM is theft
if-nél hogyan kell kettős feltételt megadni?
pl
let ido="$(date +%H)"
if test [[ "$ido" -ge "6" && "$ido" -le "20" ]] szerkesztve: (talán így jó?)
then
cp icon_n.png /tmp/icon.png
else
cp icon.png /tmp/icon.png
fi
[ Szerkesztve ]
mégsem működik.
[ Szerkesztve ]
csak csúnya megoldást tudok:
filename=icon.png
[ $ido -ge 6 ] && [ $ido -le 21 ] && filename=icon_n.png
ki kellene próbálni, hogy nem csinál-e subshellt az utolsó értékadásnak...
másrészt meg ezt is kipróbálhatod:
if [ $ido -ge 6 ] && [ $ido -le 20 ] ; then
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Mert nem kell bele a test. Ja és a számokat sem kell idézőjelbe tenni, bár az nem befolyásolja a működést.
if [[ "$ido" -ge 6 && "$ido" -le 20 ]]
then
cp icon_n.png /tmp/icon.png
else
cp icon.png /tmp/icon.png
fi
Jester
Nah, már én is kipróbáltam mindent. Közben rájöttem, hogy nem ÉS hanem VAGY kell. Működik.
kösz
if [ $ido -le 6 ] || [ $ido -ge 20 ]
then
...
Ez pedig imígyen néz ki szebben:
if [ $ido -le 6 -o $ido -ge 20 ]
Jester
Ha van egy scriptetek, aminek a hónap utolsó napján kell lefutnia, azt hogy csináljátok meg szépen?
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Ugy, hogy inkabb megis elsejen futtatnam
Egyebkent meg szerintem kozvetlenul sehogy sem lehet maganak a cronnak elmagyarazni, hogy az utolso napot szeretned, ezert kenytelen vagy trukkozni:
0 0 28-31 * * [ "$(/bin/date +%d -d tomorrow)" = "01" ] && /your/script.sh
(as seen on Google )
DRM is theft
ha jól tudom, nálatok folyik könyvelés, úgyhogy az ilyen elsején futtatnám szöveg elég érdekesen hangzik a te szádból
de ez a date-s ötlet jó, nekem nem ez jutott eszembe én eddig azt ellenőriztem, hogy a holnapi nap ugyanabban a hónapban van-e, mint a mai, de a te ötleted egy date-tel rövidebb.
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Ez a script eddig kiírta az aktuális TV műsort és a típusát.
#!/bin/sh
URL="http://tv.animare.hu/rssfeed.aspx?tartalom=aktualistvmusor&tvcsatorna=1"
feed=`curl "$URL" 2>/dev/null|sed -e 's/^.*<item>.*<title>\(.*\)<\/title>.*<\/item>.*$/\1/'`
megj=`curl "$URL" 2>/dev/null|sed -e 's/^.*<item>.*<description>\(.*\)<\/description>.*<\/item>.*$/\1/'`
echo " " $feed
echo " " $megj
Ebből pl:
$ curl "http://tv.animare.hu/rssfeed.aspx?tartalom=aktualistvmusor&tvcsatorna=1"
<?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>m1 aktuális műsora</title><link>http://tv.animare.hu/default.aspx?channel=1</link><description>Animare TV újság (http://tv.animare.hu/) m1 aktuális TV műsorának RSS formátumban történő közlése.</description><language>hu-HU</language><ttl>15</ttl><lastBuildDate>Sat, 24 Sep 2011 22:59:40 GMT</lastBuildDate><item><title>23:20 Montalbano felügyelő: A kőkutya rejtélye</title><description>(Olasz bűnügyi tévéfilm) </description><link>http://tv.animare.hu/tvmusor.aspx?id=b966307e914c0c488296672df231f77848</link><pubDate>Sat, 24 Sep 2011 21:20:00 GMT</pubDate></item></channel></rss>
Ezt:
23:20 Montalbano felügyelő: A kőkutya rejtélye
(Olasz bűnügyi tévéfilm)
Ez működött is amíg úgy nem döntöttem, hogy felteszem az előző rendszert (Snow Leopard). Most a sed 100%-ra pörgeti a procit és nem működik.
Más scriptekben működik a sed ott nincs vele gond csak a TV műsornál. Megnéztem két linuxal azzal is rendesen működik. Így most fogalmam sincs, hogy mi lehet a gond.
Nem én írtam, mert még csak most tanulgatom úgy, hogy fogalmam sincs, hogy mi a hiba.
Máshogy ki lehet még íratni azt a két adatot?
#! /bin/bash
URL="http://tv.animare.hu/rssfeed.aspx?tartalom=aktualistvmusor&tvcsatorna=1"
data=$(curl "$URL" 2>/dev/null)
title=${data##*<title>}
echo ${title%%</title>*}
desc=${data##*<description>}
echo ${desc%%</description>*}
Jester