Strona 1 z 1

[BASH] Klasy IP

: 14 lis 2013, 15:11
autor: yogurt93
Witam!
Zaczynam soją przygodę z pisaniem skryptów w bashu i cały czas natykam się na nowe problemy. Póki co wszystko udawało mi się rozwiązać samemu, ale tym razem jest inaczej, a mianowicie nie ogarniam podawania zakresu liczbowego w if'ie.

Program ma pobierać jako parametr adres IP i sprawdzić jakiej on jest klasy, a następnie wypisać tę klasę na ekran. Problem w tym, że przykładowo dla IP 200.*.*.* wypisuje, że jest on klasy B, a nie C. Proszę o pomoc.

Kod: Zaznacz cały

#!/bin/bash

p=`echo "$1" | cut -d '.' -f 1`

if [ $p -le 126 ]
then
    echo "Podane IP jest klasy A"

elif (( $p-ge128 && $p-le191 ))
then
    echo "Podane IP jest klasy B"

elif (( $p-ge192 && $p-le223 ))
then
    echo "Podane IP jest klasy C"

elif (( $p-ge224 && $p-le239 ))
then
    echo "Podane IP jest klasy D"

elif (( $p-ge240 && $p-le255 ))
then
    echo "Podane IP jest klasy E"
else
    echo "Podane IP nie ma kasy milordzie!"
fi
w kolorze jak ktoś woli ;) http://pastebin.com/zkCDPwq2

Re: [BASH] Klasy IP

: 14 lis 2013, 16:08
autor: ethanak
krótko:

Kod: Zaznacz cały

man awk
tak z ciekawości - po co powstał snobol, icon, awk, perl, python jeśli ktoś się upiera przy bashu? kompilator w bashu też da się napisać, tylko po kiego grzyba?

Re: [BASH] Klasy IP

: 14 lis 2013, 16:27
autor: yogurt93
to jest jedno z zadań od ćwiczeniowca, więc nic na to nie poradzę. Jak nie ogarnę awka to jeszcze się odezwę

Re: [BASH] Klasy IP

: 14 lis 2013, 18:36
autor: adammaj1
Jaki jest dokładny wynik programu ?
Sprawdź czy działają poszczególne instrukcje if dla wybranych danych wejściowych

Re: [BASH] Klasy IP

: 15 lis 2013, 11:42
autor: jacekalex
Ten skrypt autora, to kopanie z sandała w otwarte drzwi. :rotfl:

Dowody rzeczowe:
http://jodies.de/ipcalc
http://pypi.python.org/pypi/ipcalc/

A co słychać w repo:
http://packages.ubuntu.com/pl/raring/ipcalc
http://packages.ubuntu.com/pl/raring/python-ipcalc

Pozdro
:craz:

Re: [BASH] Klasy IP

: 15 lis 2013, 13:51
autor: Dwimenor
Oj, dajcie mu spokój. Chce się ręcznie bawić w Bashu i nauczyć porównywania liczb to niech się bawi.
Co do zasadniczego pytania:
Pierwszy "if" masz zrobiony bardzo ładnie, jak Bourne przykazał. Dalej jest już gorzej. Spróbuj skonstruować swoje "elify" tak:

Kod: Zaznacz cały

elif ([ warunek 1 ] operator_logiczny [warunek 2])
Zwróć uwagę na rodzaj nawiasów i rozmieszczenie spacji. Dodawaj też odstępy pomiędzy operatorami porównania a liczbami.
Dodaj sobie też do shebanga flagę "-x" to zobaczysz co dokładnie skrypt robi.

Kod: Zaznacz cały

#!/bin/bash -x

Re: [BASH] Klasy IP

: 15 lis 2013, 21:10
autor: yogurt93
@Dwimenor wielkie dzięki! działa! dobrze, że są ludzie, którzy umieją programować, pamiętają, jak sami się tego uczyli i jak ważna była dla nich pomoc innych. ;)