Kezdőoldal » Számítástechnika » Programozás » Bash shellscripthez aki ért,...

Bash shellscripthez aki ért, megmondaná mi a hiba?

Figyelt kérdés

Beadandót írok, a feladat az, hogy egy paraméterrel hívjuk meg, egy tantárgy nevével. A program két txt fájlt kap rögzített bemenetként, az egyikben nevek és tárgyakból hiányzások vannak, a másikban tantárgyak és a megengedett hiányzások száma, a programnak pedig ki kell írnia azokat, akik túllépik.


#!/bin/bash

if [ "$#" -ne 1 ]

then

echo "A program egy tantárgy nevét várja bemenetként!"

exit 1

fi

grep -i "$tantargy" tantargyak.txt | cut -d":" -f2 |

xargs -I {} grep -i {} tanulok.txt | \

num_lectures=$(grep -i "$tantargy" tantargyak.txt | cut -d":" -f3)

num_skippable=$(grep -i "$tantargy" tantargyak.txt | cut -d":" -f4)

num_skipped=$((num_lectures - 3))

if [ $num_skipped -ge $num_skippable ]

then echo "$2"

fi

exit 0


ezt tudtam összehozni, de nem akar működni! előre is köszi annak, aki segít!



2016. nov. 23. 14:58
 1/6 anonim ***** válasza:

Egész pontosan hol akad el?

tedd az elejére ezt az első if fölé: set -x

és futtatáskor kiírja, hol áll meg.


Amúgy a végén az echo "$2" gyanús, mert azt írtad, 1 paramétert vár a script, miközben a $2 már a másodikat jelezné, így ez nem input neki.

2016. nov. 23. 15:06
Hasznos számodra ez a válasz?
 2/6 anonim ***** válasza:
Az xargs-os sor végén tök helytelenül van |\ . Látszik, hogy egy find-ból kopiztad. Az ott tök nem kell.
2016. nov. 23. 15:11
Hasznos számodra ez a válasz?
 3/6 A kérdező kommentje:

Igen, most így ránézve én sem értem.

-x-re tesztelve végig fut a program, csak eredményt nem ad.

Ennek fényében tudom, hogy valszeg a "grepelést" rontom el! Azt el tudná mondani valamelyikőtök, hogy hogyan tudom megcsinálni?

2016. nov. 23. 15:19
 4/6 anonim ***** válasza:
mivel csak te látod a `tantargyak.txt` és a `tanulok.txt` tartalmát, így igen még mindig te állsz a legközelebb a a helyes megoldáshoz ezen a bolygón.
2016. nov. 23. 15:29
Hasznos számodra ez a válasz?
 5/6 K3Rn3LPaniC ***** válasza:
Futtasd bash -x el, akkor látod hol akad el, de lényegében már az első hsz írója is ezt mondta. :)
2016. nov. 24. 20:02
Hasznos számodra ez a válasz?
 6/6 anonim ***** válasza:

Csak egy tanács, ebben az esetben a grep nem egy robosztus megoldás. Itt oszlopok közötti teljes egyezést kell keresni, ezért nem elég csak grep-pelni. Gondolj bele pl. abba, hogyha van egy "Analizis" és egy "Analizis gyakorlat" nevű tárgy, akkor, amikor az analizisre keresel, akkor a gyakorlat is fel fog jönni. Itt én awk-ot használnék a helyedben. valahogy így


awk -var tant="${tantargy}" -F":" '$2 == tant'


De a kérdésben leírt script-ben eleve nincs definiálva a tantargy valtozo.... valami ilyesmi hiányzik:

tantargy="${1}"


És még egy tipp:

num_skipped=$((num_lectures - 3))

Szerintem ez nem a num_skipped, azaz a kihagyott órák, hanem a kihagyható, azaz a num_skippable változó. (Úgy értelmezem, hogy maximum 3 órát lehet hiányozni) Különben így első blikkre elég értelmetlennek néz ki ez a művelet.


Ha az első grep output-ját pipe-olod az xargs parancsba, és van sortörés, akkor kell a cut utáni pipe jel után egy \ karakter.


Ennek kimenetét kell egy loopban beolvasni. Walami ilyesmiről lenne szó:

xargs -I {} grep -i {} tanulok.txt | while read line; do


Jaja, és az echo $2 a végén tényleg eléggé értelmezhetetlen. Azt gyanítom, hogy itt egy névnek kellene lennie, amit a tanulok.txt-ből olvas ki. De ezt nem tárolod el sehova.


Összeségében elég messze állsz a végétől. :(

2016. nov. 24. 23:21
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!