Keresés


Toplista

Toplista
  • betöltés...

Magántanár kereső

Ha szívesen korrepetálnál, hozd létre magántanár profilodat itt.
Ha diák vagy és korrepetálásra van szükséged, akkor regisztrálj be és írd meg itt, hogy milyen tantárgyban!

Shell script alapú házi

271
Sziasztok!
ismét az alábbi feladathoz szeretnék segítséget kérni (inkább komplett megoldást, ha lehetne):
1. HTML szintaktika ellenőrző

Írjon egy html-szintaktika ellenőrző programot, mely ellenőrzi a nyitó illetve záró TAG-eket. A program próbálja megállapítani a hiba helyét!
Ismerje a fontosabb TAG-eket, és ha hibás TAG-gel találkozik, kérdezze meg, hogy kijavítsa-e. Könnyen bővithető legyen új szintaktikai
elemekkel. Ellenőrizze az argumentumban megadott file nevét is, és hogy létező, olvasható text file-e. pl.:

$>htmlell file
Hianyzik a </html>
Atnevezzem-e file.html -re?
I/N
Ehhez a feladathoz az alábbi dolgok kellenének még:

"A program működése feleljen meg a UNIX alapelveinek, amit kell, azt csinálja megbízhatóan, minden sallang nélkül.
Ha nem tudja értelmezni argumentumait, akkor valami ehhez hasonló módon tájékoztasson:
$>ls -G
ls: Not a recognized flag: G
Usage: ls [-1ACFLNRabcdefgilmnopqrstux] [File...]

Minden feladatnak futnia kell UNIX alatt.
Használja a szabványos ki- és bemeneti fájlokat, a működésének ne legyenek mellékhatásai.
(pl. ne hagyjon maga után szemetet, stb.)

A programhoz szükséges minden inputot argumentumként adjon át,
és a program ellenőrizze is le az összes megadott argumentumot (darabszám, típus, stb.).

A programhoz írjon rövid helpet (hívható legyen a programnév –h kapcsolóval),
ami rövid tájékoztatást ad a működésről, a szükséges argumentumokról, kapcsolókról, azok típusáról, stb.

Használjon „beszédes” változóneveket és megfelelő kommentárral lássa el a programot.
(A megfelelő nem azt jelenti, hogy minden programsort 4 másikban magyaráz meg!)"
A segítséget előre is köszönöm!
Jelenleg 1 felhasználó nézi ezt a kérdést.
0
Felsőoktatás / Informatika

Válaszok

1
A feladat azt kéri, hogy „minden inputot argumentumként adjon át”. Azokat vagy átadod a szkript indításakor vagy nem. A szkript futása közben már fölösleges kiírni, hogy „Adja meg a HTML fajl eleresi utjat”. Sőt, bármit fölösleges kiírni mielőtt a szkript ellenőrizte volna, hogy kapott vagy nem adatot.

Ez itt megtenné a feladatban kért és a logikus ellenőrzéseket, de a tidy futtatását rád bízom, mert ami példányt beszereztem, az nem működőkepés.

#!/bin/bash

function segitseg()
{
    echo "Szintaxis:
    $0 [-h] fajl
Argumentumok:
    -h -- segítség"
}

while getopts ':h' argumentum; do
    case "$argumentum" in
        'h')
            segitseg
            exit
        ;;
        '?')
            echo "HIBA: érvénytelen argumentum '$OPTARG'" >&2
            segitseg
            exit 1
        ;;
    esac
done

shift $(( OPTIND - 1 ))

if (( $# == 0 )); then
    echo "HIBA: hiányzó HTML fájl paraméter" >&2
    exit 1
fi

if (( $# > 1 )); then
    echo "HIBA: túl sok HTML fájl paraméter" >&2
    exit 1
fi

htmlfajl="$1"

if [[ ! -e "$htmlfajl" ]]; then
    echo "HIBA: a '$htmlfajl' fájl nem létezik" >&2
    exit 1
fi

if [[ ! -f "$htmlfajl" ]]; then
    echo "HIBA: a '$htmlfajl' fájl nem fájl" >&2
    exit 1
fi

if [[ ! -r "$htmlfajl" ]]; then
    echo "HIBA: a '$htmlfajl' fájl nem olvasható" >&2
    exit 1
fi

tipus="$( file --brief --mime-type "$htmlfajl" )"
if [[ "$tipus" != 'text/html' ]]; then
    echo "HIBA: a '$htmlfajl' fájl tartalma nem HTML" >&2
    exit 1
fi

kiterjesztes="${htmlfajl##*.}"
if [[ "$kiterjesztes" != 'htm' && "$kiterjesztes" != 'html' ]]; then
    ujnev="${htmlfajl%$kiterjesztes}html"
    echo "FURCSA: a '$htmlfajl' fájl kiterjesztése nem '.html'"
    if [[ -f "$ujnev" ]]; then
        echo '(nem ajánlom fel, hogy átnevezzem, mert az új névvel már létezik fájl)'
    else
        read -p "Átnevezzem-e '$ujnev'-re? (I/n): " valasz
        if [[ "$valasz" == 'i' || "$valasz" == 'I' ]]; then
            if mv "$htmlfajl" "$ujnev"; then
                htmlfajl="$ujnev"
            else
                echo "HIBA: a '$htmlfajl' fájl átnevezése sikertelen" >&2
            fi
        fi
    fi
fi
   
tidy "$htmlfajl"
0