Új hozzászólás Aktív témák
-
prucam
tag
Sziasztok,
most csinálok éppen egy egyszerű scriptet, ami hétfőnkét egy adott sort beszúr minden file-be.
#!/bin/bash
n1=`date +"%A"`
n2=hétfő
c=`date +"%V"`
n=`date +"%A"`
x=/mnt/sdc10/home/iras/*
if [ "$n1" = "$n2" ]; then
for i in $x;
do
echo "$c. $n #############################################" >> $i;
done
else
echo "Nem hétfő van!"
fi
exitMiután lefut ezt az üzit irja ki:
"./3_mi_a_neved: line 10: /mnt/sdc10/home/iras/: Is a directory"
Hogyan kellene javítani?
Az "iras" mappában csak kiterjesztés nélküli fájlok vannak.
A sok "#" karaktert hogyan lehetne rövidebben írni? (pl. 33#)
üdv
-
felejtsd el ezt a hétfő ellenőrizgetést.
nem az a jó módszer, hogy elindítod minden nap, és megnézed, hétfő van-e, hanem az, hogy csak hétfőn indítod el.a hozzáfűzés meg lehet, hogy azért nem megy, mert könyvtár vagy könyvtárra mutató link is van az írásos könyvtárakban.
[ Szerkesztve ]
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
-
-
prucam
tag
válasz bambano #2208 üzenetére
x=/mnt/sdc10/home/iras/*
szerintem ez lesz a rossz. A kiterjesztés nélküli file-kre nem jó a "*". Így a mappák is (sőt még az almappák is!) benne vannak.
Hogyan kellene, azt nem tudom, írtam a linux-os topicba, valaki csak tudja.A "set-x" -es próbálgatom más scripteknél is. Nem tudtam, hogy van ilyen.
-
Headless
őstag
Hát vagy find-al keresed meg és futtatod amit kell
find $x -type f -exec ....
vagy
a meglévő for ciklusba teszel egy ellenörzést hogy fájl-e...
valahogy ígyif [ -f "$file" ];then
echo "file"
fiha van printf parancsod, akkor megfelelő számú szóközt tudsz csinálni valahogy így. azt meg kicserélheted #-re de szerintem nem éri meg, lehet van jobb megoldás is.
printf "%33s" |sed "/ /#/g"
LEDE - R3G/DIR860l -> https://tinyurl.hu/Ntkb/
-
prucam
tag
Köszi mindenkinek a segítséget!
Végül is ezt sikrült "fabrikálni":
find . -maxdepth 1 -type f ! -name "*.*"
üdv
-
-
-
Fecogame
veterán
while [ $(ls /egyik/path | wc -l) -gt $(ls /masik/path | wc -l) ]
do
some commands
doneA vastagított rész értékéhez szeretnék hozzáadni egyet. Hova kellene beírnom, és legfőképp, hogyan?
Lassú a mobilinterneted? 4G/LTE antennák, közvetlenül raktárról ---> http://bit.ly/LTE_Antennak
-
spammer
veterán
válasz Fecogame #2218 üzenetére
Pl.:
while [ $(ls /egyik/path | wc -l) -gt $(expr $(ls /masik/path | wc -l) + 1) ]
while [ $(ls /egyik/path | wc -l) -gt $((( $(ls /masik/path | wc -l) + 1 ))) ]
De biztos vannak szebb megoldások is.
[ Szerkesztve ]
„A feketébe öltözött ember a sivatagon át menekült, a harcos pedig követte."
-
-
válasz spammer #2221 üzenetére
helyesen:
$(( $(ls /masik/path | wc -l) + 1 ))
man bash:
Arithmetic Expansion Arithmetic expansion allows the evaluation of an arithmetic expression and the substitution of the result. The format for arithmetic expansion is:$((expression))
ha így tagolod, akkor csinál egy parancsbehelyettesítést egy egész számra???
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
-
spammer
veterán
-
sonar
addikt
Sziasztok,
itt a grep miért nem működik?
Ha echo-val kiiratom a line változót szépen megvan, csak a grep nem eszi meg.for line in $(cat 1.txt); do grep "$line" /sandbox/incoming/* -l ; done
A tudást mástól kapjuk, a siker a mi tehetségünk - Remember: Your life – Your choices!
-
sonar
addikt
válasz Jester01 #2226 üzenetére
Bárhova tettem a
-l
paramétert az eredmény változatlanul semmi.
Ha a $line paramétert kézzel adom meg a grep-nek szépen listázza a fileokat. Mihelyt egy ciklusba ágyazom az eredmény semmi. De ha echo $line -t még utána biggyesztem akkor az echo-s sorok megjönnek.A tudást mástól kapjuk, a siker a mi tehetségünk - Remember: Your life – Your choices!
-
BullZeye
veterán
Állítólag itt nagyobb eséllyel kapok választ
Dijnet törli számlákat, nekem viszont szükségem lenne rá, de vagy 1 év lenne letölteni egyenként mindet, és emailben konkrétan mossák kezeiket, hogy ilyen helyzetbe hozzák az embereket.
Találtam HUP-on egy megoldást, és más linux rendszerem nincs, csak Synology ds215j
Itt a Shell Script hozzá, viszont login után azt írja ki, hogy:
login... OK
query service providers... ERROR: not able to detect service providers
TerminatedVan valami tippetek, hogy miért? Linkek elméletileg jók, legalábbis amit értettem belőle, vagy kell valamit telepítenem hozzá még pluszba?
-
BullZeye
veterán
válasz Jester01 #2229 üzenetére
"https://www.dijnet.hu/ekonto/control/szamla_search"
Ez az oldal (link), és azon belül pedig van egy legördülő választó, aminek a DIVje szlaszolgid, és abban van kb 6-7 bejegyzés ahogy a képen látható
Másnak működik, csak nekem nem, Synology DS215Jn próbálom futtatni SSHn keresztül root/admin joggal. Kell ehhez valami egyéb dolgot telepíteni?
[ Szerkesztve ]
-
D@reeo
aktív tag
Sziasztok
Van egy vékonykliensem, ami valamiért eldobálja a netet. Hálózat van, csak a nagyvilágba nem lát ki.
Amíg nem találom meg az okát, írtam egy ilyet:#!/bin/bash
wget -q --spider http://google.com
if [ $? -eq 0 ]; then
echo "Online"
else
echo "Offline, restarting eth0 interface"
date +"%Y/%m/%d %H:%M:%S : Restarting" >> online.txt
ifconfig eth0 down && ifconfig eth0 up
fiMűködik is, megy a crontabba, a kérdésem igazából annyi lenne, hogy érdemes ezen valahol csiszolni (timeout érték, ciklusba tenni, wget helyett ping/curl stb)? Köszi
-
dabadab
titán
"érdemes ezen valahol csiszolni (timeout érték, ciklusba tenni, wget helyett ping/curl stb)?"
igen, nagyjából ez
a wget helyett egy icipicivel kevesebb sávszélességet használ mondjuk egy
ping -c 1 -w 1 google.com >/dev/null
(ez is exit statusszal üzen, szóval utána az if maradhat)
Meg persze be lehet rakni az egészet egy ciklusba és nem cronból indítani (gondolom percenként), hanem folyamatosan futtatni és belerakni a ciklus végébe egy "sleep 1"-et és akkor már másodpercenként tudja ellenőrizni a netet.
DRM is theft
-
D@reeo
aktív tag
válasz dabadab #2233 üzenetére
Szia
Köszi szépen.
Átírtam, bár a sávszélesség nem játszik nagyon szerepet, otthoni net, nincs data limit.
Cikkluson gondolkodtam én is, bár az 1 seccenként való futtatás teljesen felesleges szerintem.
Most valóban 1 percenként fut a debug alatt, a későbbiekben meglátom, hogy így hagyom-e .Szép estét -
D@reeo
aktív tag
Sziasztok
#!/bin/sh
LogDir=/opt/log
find $LogDir -name "*.bak*" -exec ls -lah {} \; >> /opt/log/log.log
find $LogDir -name "*.bak*" -type f -print0 | xargs -0 rm -fA két find helyett az első find eredményét szeretném cikklusba tenni és úgy futtatni a törlést. Tudna valaki segíteni, hogyan kellene? Köszi
[ Szerkesztve ]
-
Headless
őstag
Szia nem egészen értem mit akarsz.
find az ígyis úgyis recursive ha csak nem beállítod a -maxdepth -mindepth kapcsolókat. Másrészt miért a xarg? ha ott van a beépített delete funkció?
find "$LogDir" -name "*.bak*" -type f -delete
ahh most leeesett tehet a *.bak* mappán balüli *.bak* fájlokat szeretnéd törölni?
ehhez viszont nagy kérdés hogy csak a *.bak/*.bak-et akarod törölni vagy *.bak/akarmi/*.bak-et is
amúgy én a -path szűrőt használnám... először delete nélkül futtasd, nehogy törölj valamit ami kell..
find "$LogDir" -path "*.bak/*.bak" -type f -delete
ez az utóbbi verzió ami a *.bak/akármi/*.bak-ot is törli.
LEDE - R3G/DIR860l -> https://tinyurl.hu/Ntkb/
-
-
D@reeo
aktív tag
válasz bambano #2237 üzenetére
Sziasztok,
@Headless
/opt/log/ alatt minden (al)könyvtárból.
"miért a xarg" Hirtelen ezt találtam gugliban.
a -delete-t nem próbáltam ki, de nem tudom, hogy a logolást mennyire nehezítené meg.@bambano, köszi, utánaolvasok a teenek.
ls-lah azért ugrott be elsőnek, mer így könnyen tudom a fájlméretet is logolni.Működik így is szépen 2 külön paranccsal, csak hát szebb lenne optimalizálva futtatni
-
zsotesz81
senior tag
Sziasztok
Van egy számolós scriptem, parancssorban kérek be két számot. Amit meg szeretnék oldani, az az, hogy fogadja el a tizedespontot is amennyiben a pont után 0-k vannak csak, vagy semmi (tehát 10. = 10.0 = 10.0000 = 10)
Próbáltam valami pattern-t ('*([1-9])?(.)*(0)') írni, de ez nem jó.
Ami még kikötés, hogy csak ksh belső parancsok használhatók.
Tudnátok ebben segíteni? -
válasz zsotesz81 #2239 üzenetére
szerintem a patterned nem jó.
[0-9]+\.[0]*$
vagy valami ilyesmi kellene.a (.)*(0)-t nem értem, a *-ot mindig azután kell tenni, amiből többet akarsz.
a másik lehetőség, hogy a szám végéről levágod a .0* patternt, ha van ott olyan, és utána csak egész számos illeszkedést ellenőrzöl.
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
-
-
Sziasztok!
Egy CGI szkript írásán dolgozom, ami természetesen bash alapú és POSTDATA-t hivatott feldolgozni. Van egy QUERY_STRING változóm, értelemszerűen ebbe kerül a Query String. Ami pedig így néz ki pl:
rsscontent=<változó szöveg>&Submit=Submit
Nekem valahogy az rsscontent utáni <változó szöveg>-et kéne egy változóban megkapnom, úgy, hogy az ékezetes karakterekkel és az & jelekkel is tudjon mit kezdeni.
Olyan szempontból könnyű a dolog, hogy minden statikus, csak az rsscontent értéke nem...
Tudnátok segíteni? Köszi!
Hogy hívják az éhes horgászt? Gyere Pista, kész a kaja!
-
Headless
őstag
válasz Mr Dini #2245 üzenetére
Ez az a pont amikor vagy váltasz valami erre használatos nyelvre (lua,php,stb). Vagy a form enctype-ját átállítod multipartra. Viszont így a változó beállítások sokszor nehezebbek lesznek, és pl az sem fog működni, amit írtam pü-ben tegnap.
<form action=… method=post enctype='multipart/form-data'>
Így rendesen szeparált listát kapsz a változókról, nem csak egy urlenkódolt listát, vagyis nem & lesz a szeparátorod.
LEDE - R3G/DIR860l -> https://tinyurl.hu/Ntkb/
-
válasz Mr Dini #2245 üzenetére
nagyon balta megoldás:
kveri=$(echo $QUERY_STRING| sed -e 's/^rsscontent=//' -e 's/&Submit=Submit$//')
vagy valami ilyesmi
szerk: paraméter darabolásra szintén balta megoldás:
echo $kveri | IFS=\& read par1 par2 par3 ...
az & jelekkel elvileg nem lesz gond, mert az inputként kapott & jelet a böngésző kódolja.
[ Szerkesztve ]
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
-
vargalex
félisten
válasz Mr Dini #2245 üzenetére
Én valami ilyesmit csinálnék:
rsscontent=$(echo -e $(echo "rsscontent=<változó szöveg>&Submit=Submit" | sed -e 's/^rsscontent=\([^&]*\)&\(.*\)/\1/' | sed 'y/+/ /; s/%/\\x/g'))
Azaz, ha URL encode-olva jön, és az rsscontent tartalma pl.: "változó&szöveg":
gavarga@gavarga-e5540 ~ % rsscontent=$(echo -e $(echo "rsscontent=v%C3%A1ltoz%C3%B3%26sz%C3%B6veg&Submit=Submit" | sed -e 's/^rsscontent=\([^&]*\)&\(.*\)/\1/' | sed 'y/+/ /; s/%/\\x/g'))
gavarga@gavarga-e5540 ~ % echo $rsscontent
változó&szövegAlex
-
Nagyon szépen köszönöm uraim a gyors segítséget!
@Headless
Luát webszerveren nem szeretnék futtatni, a PHP-val meg igen régen volt dolgom... Azon gondolkozom, hogy az összes jelenlegi szkriptet átírom Perl-re... Szerintem azzal járnék a legjobban, hisz tulajdonképp az összes ilyen form adatfeldolgozás "stringműveletekből" áll.
Hogy hívják az éhes horgászt? Gyere Pista, kész a kaja!
-
Lacc
aktív tag
Sziasztok!
Nem igazán értek a shell programozáshoz. Szerettem volna a whoami függvény eredményét változóba menteni, de nem ment, persze ha hegy számot akarok megadni, akkor megy. Folyton azt kapom hibánat, hogy a =: nem támogatott. Pedig ez jó:
var1 = 2
ezzel nincs baja, viszont már ezzel igen:var2 = whoami
Aztán rákerestem neten, és eval-os megoldásokat találtam, kipróbáltam, ugyanúgy csak hiba-hiba hátán, grrrr.Amihez nekem kellene segítség az csak ennyi:
echo 'alias vagrant="cd /vagrant"' | tee /home/vagrant/.bash_aliases
A vagrant helyett szeretném a whoami függvény eredményét megadni.
Ugyanis nem mindig lesz vagrant felhasználó létrehozva, valamikor más lesz a felhasználó neve.Ezt hogy lenne lehetséges?