2024. április 19., péntek

Gyorskeresés

Szkriptelés betegségek

Írta: | Kulcsszavak: shell szkript . programozási hiba

[ ÚJ BEJEGYZÉS ]

Nézegetem a másik portált, konkrétan ezt: [link]

A feladat az, hogy egy fájlban felsorolja a nyomtatói ip címét, ezekről le kellene kérni a lapszámlálót és elküldeni emailben az eredményt. Ez eddig korrekt. De ami utána jön, az gáz. Oké, a kérdező azért kérdez, hogy tanuljon vagy előbbre jusson a problémájával, de hogy rendes választ nem kap...

A hülyeség csimborasszója, mikor azt a választ kapja, hogy shell szkript helyett python meg node.js. Azért ne süllyedjünk már odáig, hogy egy 3-4 soros shell szkript helyett nekiállunk objektumokat meg osztálystruktúrát tervezni meg ilyenek, ez abszolút baromság.

Nem gondolnám, hogy én vagyok a bash zseni, de annál, amit ők ott összedobtak, jobbat tudok írni, majd megérkezik Jester01 kolléga és kijavítja, ami hiba még marad benne :P

Szeretne a levélbe beleírni valami, az ip címnél emberibb megnevezését a nyomtatónak. Erre két út kínálkozik (figyelembe véve, hogy van egy fájlunk, amiben egy sor egy ip cím formátumban ip címek vannak):
1. a fájlba minden sorba beleírja, hogy adott ip címhez tartozó nyomtatónak mi a megnevezése. mezőszeparátornak a magam részéről a csővezetékjelet szoktam használni, mert az fordul elő legritkábban bármiféle stringben.
2. ha fel lehet tételezni, hogy a nyomtatók rendesen be vannak állítva, akkor a Description snmp objektum ki van töltve és onnan ki lehet szedni a megnevezést.

Az első hajmeresztő dolog, hogy az ip címet úgy szedi ki, hogy a cikluson belül beolvassa a fájlt, annyi alkalommal, ahány soros, és head meg tail utasításokkal kivágja az aktuális sort. Jééézus. Miután az ip címeket sorban kell lekérdezni, miért nem olvassa végig a fájlt egyszer? Ez a konkrét kódrészlet:

for i in `seq $(cat adatok | wc -)`; do
sor=`head -n$i adatok | tail -1`

A következő probléma, hogy egy csomó helyen awk-t forkol, amikor nem kellene. Azt, hogy miért awk, miért nem cut, önmagában is érdemes lenne vizsgálni, de nem teszem meg. Mezőket kivagdalni outputból elég barkács munka ahelyett, hogy elolvasnánk a kimenetet produkáló program kottáját, és megbeszélnénk a programmal, hogy ki se írja azt, amit ki akarunk vágni és eldobunk. Itt ez konkrétan az snmpget program.

Probléma még, hogy a fordított aposztróf, mint processz behelyettesítés deprecated a bashben, helyesen $( ) kell. De ha tudunk shellben programozni, akkor ehhez a feladathoz ez nem kell.

Ja, hogy az echo ne emeljen sort, az bonyolult...

Sendmaillel nem küldenék levelet, ha nem muszáj, mert kicsit macerás fejléceket meg hasonlókat babrálni. Van bsdmailx csomag a linuxokon, azzal egyszerűbb (szerintem).

Tehát legyártunk egy fájlt, mondjuk nyomtato.txt néven, beleírjuk, hogy:

10.1.1.1|Gizike nyomtatója
10.1.1.2|Gőzeke nyomtatója
10.1.1.3|Bikkfalábú Tódor nyomtatója
10.1.1.4|Gipsz Jakab nyomtatója

ehhez a szkriptnek az érdemi része:

[ -r nyomtato.txt ] || exit 0
cat nyomtato.txt | while IFS=\| read ip leiras ; do
echo -n ${ip} ${leiras}
snmpget -Oqv -v 2c -c public ${ip} nyomtatooid 2>/dev/null || echo ki van kapcsolva
done | mailx ${címzettek}

Ezt lehet cifrázni, a kérdésfeltevésben szép kimenet volt. Ha ez így nem jó, akkor az echo -n sor helyett ezt kell írni:
printf "%s %s: " ${ip} "${leiras}"

Igen, a nagytudású devopsok meg jáva architektek meg hasonló képzett szakemberek szerint ehhez python vagy node.js szkript szükséges. Azért jó, hogy oracle adatbáziskezelő például nem kell hozzá, meg docker nélkül is el tudják képzelni a megoldást (el tudják?). Oké, nem kell mindenkinek ismernie az snmpget-et, ezen túl is léptem volna, de hogy valaki ne tudjon fehér ember módjára soronként beolvasni egy txt-t bash szkriptben, azért rendes iskolában évismétlés jár.

Hozzászólások

(#1) UnA


UnA
Korrektor

Ha megnézem a linket, akkor csak egy ember javasolt alternatív megoldást bash helyett, ezen kár volt így felmérgelni magad ;)

Már csak azt nem értem, hogy a hasznos kis segítséget miért nem ott publikáltad?

(#2) Cucuska2


Cucuska2
őstag

Monnyuk én is napközben pythonozok nagyrészt, így megértem, hogy miért jutott valakinek az eszébe, hogy pythont használjon.
Másrészt pedig a bash szintaktikája nem magától értetődő, a legegyszerűbb sztringműveleteket is állandóan keresnem kell.

Rock and stone, to the bone! Leave no dwarf behind!

(#3) sh4d0w válasza Cucuska2 (#2) üzenetére


sh4d0w
nagyúr
LOGOUT blog

Igen, de a python használatához telepíteni kell a pythont, a shell meg azonnal ott van.

https://www.coreinfinity.tech

(#4) Cucuska2 válasza sh4d0w (#3) üzenetére


Cucuska2
őstag

Az elmúlt öt évben nem használtam olyan Linux disztrót, ami a python parancsra nem a python2-t indította el.

Mindazonáltal nap mint nap használom a basht, szeretem; nem tudnék nélküle élni. Konkrétan SSH-n dolgozom bashban munkaidőm felében.

[ Szerkesztve ]

Rock and stone, to the bone! Leave no dwarf behind!

(#5) Silεncε válasza sh4d0w (#3) üzenetére


Silεncε
őstag

Linuxon. Windowson mindkettőt telepíteni kell, akkor meg már tökmindegy

(#6) sh4d0w válasza Silεncε (#5) üzenetére


sh4d0w
nagyúr
LOGOUT blog

Az eredeti kérdésfelvetés Linuxos, hogy a pokolba kerül ide a Windows? :F

https://www.coreinfinity.tech

(#7) bambano válasza UnA (#1) üzenetére


bambano
titán
LOGOUT blog

figyelmes olvasó észrevehette, hogy legjobban azon mérgeltem fel magam, hogy ilyen agyhalott módon olvasta be az ip címeket és ezt senki nem tette helyre.

azért nem ott publikáltam, mert nem értek egyet a moderációs elveikkel, ezért ott nem szólok hozzá.

Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis

(#8) Silεncε válasza sh4d0w (#6) üzenetére


Silεncε
őstag

Igaz, semmi, nem szóltam, sry :R

(#9) bambano válasza Cucuska2 (#2) üzenetére


bambano
titán
LOGOUT blog

az alapprobléma, amit évek óta látok, mostanában egyre erősebben, hogy sok okos architekt túltervezi a rendszereket. mindent fel akar használni, amit ismer. a unixos alapelv, hogy legyen minden a lehető legegyszerűbb, kihalóban van.

anno, amikor egy internet szolgáltatás beindításán dolgoztam, hozták a külföldi tulaj rendszertervét. egy orbitális pókháló volt az egész, tele mindenféle komponensekkel. a cucc háromnegyedét helyettesíteni tudtam egy sed szkripttel.

Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis

(#10) Realradical válasza bambano (#9) üzenetére


Realradical
őstag

[link]

Amúgy egy ilyen feladatot szerintem tök mindegy, hogy pythonnal vagy bashben csinálsz meg, mindkettő jó megoldás. Egyik esetben sem kell semmi hozzá ami alapból nincs egy linuxon.

Things that try to look like things often do look more like things than things

További hozzászólások megtekintése...
Copyright © 2000-2024 PROHARDVER Informatikai Kft.