Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [shell Scripting] regular expression

    Come faccio a controllare con una regular expression che il parametro ricevuto da read sia un ip?

    Io provo così:
    codice:
    while [ "$riga"!= "*.*.*.*" ]
    do
      echo "Inserisci un ip:"
      read riga
    done
    ma la shell mi restituisce:
    codice:
    line 1: [: !=: unary operator expected
    sapientino regna sovrano

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    93
    Ciao,

    forse non c'entra nulla ma "riga" è inizializzata?

  3. #3
    Utente di HTML.it L'avatar di toraz
    Registrato dal
    Nov 2001
    Messaggi
    263

    Re: [shell Scripting] regular expression

    Originariamente inviato da sapientino
    [ "$riga"!= "*.*.*.*" ]

    Questo e` tutto sbagliato:

    1. ci vuole uno spazio tra "$riga" e != (da cui l'errore)

    2. test non permette di confrontare una stringa con un'espressione regolare, solo una stringa con un altra per uguaglianza, disuguaglianza e ordinamento lessicografico (maggiore/minore). Devi usare qualche altro comando tipo grep, sed o awk

    3. "*.*.*.*" non e` nemmeno un'espressione regolare valida

  4. #4
    @jobv
    Non credo serva inizializzarla perché se è la variabile è ineststente il while parte lo stesso (credo che la consideri null)

    @toraz
    Se lascio lo spazio mi segna un altro errore:
    codice:
    $ line 1: [: too many arguments
    era per quello che l'avevo inserito.

    Resta il fatto che io non ho capito ancora come fare per controllare che l'utente inserisca un ip valido del tipo:
    *.*.*.*
    o meglio ancora
    ???.???.???.???

    C'è da impazzire con lo scripting da shell.
    Qualcuno che mi aiuti?
    sapientino regna sovrano

  5. #5
    se scrivo:
    codice:
    while [ !expr "$riga != [*.*.*.*]" ]
    si ritorna all'errore originario.

    Come faccio questo controllo?
    AIUTO!!
    sapientino regna sovrano

  6. #6
    Utente di HTML.it L'avatar di toraz
    Registrato dal
    Nov 2001
    Messaggi
    263
    Siccome buona parte dei tuoi tentativi, lasciatelo dire , non stanno ne' in cielo ne' tantomeno in terra ti consiglierei di leggere Advanced Bash Scripting (che a dispetto del nome parte dall'ABC), se cerchi su Google trovi anche una versione tradotta in italiano.

    Venendo al merito, per fare il controllo devi usare un comando tipo grep, esempio alla buona che mi viene in mente su due piedi

    codice:
    while [ ! `echo "$riga" | grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$"` ]; do
      read riga
    done
    echo finalemente
    l'espressione regolare non e` precisissima (accetterebbe anche un indirizzo tipo 444.444.444.444) ma credo che renda l'idea. Probabilmente ci sono anche soluzioni migliori, ma questa e` la prima che m'e` venuta in mente...

  7. #7
    Perfetto.
    Poi troverò un modo per splittare l'ip usando i punti ed inserirò un altra condizione all'interno del while con il -a

    Comunque per quanto riguarda lo shell scripting te la cavi alla grande!
    Ti faccio altre due domande per concludere e poi ti lascio in pace.


    E se tra i punti non avessi voluto solo numeri, ma mi fosse andato bene qualsiasi altro carattere?
    E se tra i punti avessi voluto SOLO lettere o numeri?

    Ah, grazie mille per l'aiuto che mi stai fornendo. Non so proprio come ringraziati.
    Mi vuoi sposare?
    sapientino regna sovrano

  8. #8
    Ho studiato qualcosina, ma ci sono 50 tipi di regular expressions.

    Ho messo solo 2 punti per abbreviare, tanto è tutto uguale.

    codice:
    while [ ! `echo "$riga" | grep -E "^[[0-9][A-Za-z]]{1,3}\.[[0-9][A-Za-z]]{1,3}\.[[0-9][A-Za-z]]{1,3}$"` ]
    vorrei fare accettare robe tipo
    a.14p.qqr

    Adesso non capisco più cosa sbaglio.
    sapientino regna sovrano

  9. #9
    YEAHHHHHHHHHHHH

    Risolto.

    codice:
    while [ ! `echo "$riga" | grep -E "^[0-9A-Za-z]{1,3}\.[0-9A-Za-z]{1,3}\.[0-9A-Za-z]{1,3}$"` ]

    TORAZ GRAZIE MILLER PER L'AIUTO.

    Segnalo un supermitico link che mi ha aiutato:

    Link supermitico sulle regexp
    sapientino regna sovrano

  10. #10
    Ehm....Toraz, non pensare che io sia pazzo.

    Esiste un comando per abbreviare una stringa tramite regular espression?
    Cerco un comando che mi prenda solo la parte che gli passo nella regular expression.

    Esempio (volgio quello che c'è dopo "ci" e prima di "o" )
    codice:
    echo "ciao" | COMANDO "^ci" "o$"
    Ti prego, dimmi che esiste!
    sapientino regna sovrano

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.