Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    160

    [BASH] Problema nel case

    Ciao a tutti!!

    Ho un problema con uno script che sto implementando che fa alcune operazioni matematiche. Come ultima condizione del case ho messo la seguente istruzione:

    *[!/\*+-%mcdmedia]*) echo "Errore"
    Cioè se l'argomento passato è diverso da / * + - % mcd o media allora stampa "Errore". Il problema è che quando lo vado a lanciare e faccio per esempio 5 * 3 mi da errore. Cosa ho sbagliato in questa RE? Forse ho le idee un po' confuse

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [BASH] Problema nel case

    Originariamente inviato da Manugal
    Ciao a tutti!!

    Ho un problema con uno script che sto implementando che fa alcune operazioni matematiche. Come ultima condizione del case ho messo la seguente istruzione:

    *[!/\*+-%mcdmedia]*) echo "Errore"
    Cioè se l'argomento passato è diverso da / * + - % mcd o media allora stampa "Errore". Il problema è che quando lo vado a lanciare e faccio per esempio 5 * 3 mi da errore. Cosa ho sbagliato in questa RE? Forse ho le idee un po' confuse
    Occhio che la stringa di corrispondenza indicata nel case non supporta le espressioni regolari!!! Supporta al massimo * e ? e la 'or' |. Praticamente come per il match dei file nella shell. Inoltre (ed è questo che ti servirebbe), il case *) è il default se non viene scelto un altro case.

    Quindi:
    codice:
    case $arg in
        ....
    
        mcd)
            ....
            ;;
        media)
            ....
            ;;
        *)
            echo "Errore";
            ;;
    esac
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    160
    Ah quindi nel case basta semplicemente che metto *) e quello è il caso di default se non vengono soddisfatti gli altri casi? Fico . Allora perché il mio prof in questo esempio di case ha fatto così?

    codice:
    #!/bin/bash
    
    echo “Your choice?”
    read reply
    
    case "$reply" in
    "1") echo “administrator”
    ;;
    “2”) echo “student”
    ;;
    “3”) echo “teacher”
    ;;
    *[!1- 3]*) echo "Usage: `basename $0` (=1,2,3)";
    exit 1
    ;;
    esac
    
     exit 0
    Come vedi ha usato *[!1- 3]*). Quindi sarebbe stato uguale se avesse usato solo *) o qui il caso è differente?

    Grazie.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Manugal
    Ah quindi nel case basta semplicemente che metto *) e quello è il caso di default se non vengono soddisfatti gli altri casi? Fico . Allora perché il mio prof in questo esempio di case ha fatto così?
    In quello script sarebbe superfluo il case *[!1- 3]*) (ammesso che la sintassi sia corretta, mi sembrano strani quei * ma ora non ho modo di verificare su una linux box!).
    Basta mettere *) e catturi tutto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.