Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Opzioni da riga di comando per script

    Ciao a tutti,
    mi trovo ad affrontare un problema nella creazione di uno scrip di shell bash. Lo script accetta i seguenti parametri

    rename [-t <days>] [-d <dir>] <file_type>

    senza spiegare cosa fa precisamente, a me interessa fare attenzione ai parametri:

    -t (opzionale) seguito dal valore <days>
    -d (opzionale) seguito dal valore <dir>
    <file_type> deve essere sempre specificato

    come faccio:

    1. a controllare che specifichi sempre <file_type>, indipendentemente dall'ordine dei parametri. Facendo un controllo su $# so solo quanti parametri sono stati passati.
    2. il controllo sui parametri opzionali indipendentemente dall'ordine.

    Ho utilizzato pure getopt ma in effetti mi dice solo se si utilizzano dei valori diversi da t d etc etc


    Esempio
    rename <file_type> ===> OK
    rename -t <file_type> ==> NO OK manca <days>
    rename -t <days> <file_type> ==> OK
    rename <file_type> -t <days> ==> OK



    Spero di essere stato chiaro
    Grazie
    "Considerate la vostra semenza:
    fatti non foste a viver come bruti,
    ma per seguir virtute e canoscenza''."
    Dante Alighieri

  2. #2
    Leggi qui:
    http://www.tldp.org/LDP/abs/html/arrays.html

    e guarda questo script:

    codice:
    #!/bin/bash
    
    function usage(){
          echo >&2 ""
          echo >&2 "usage: ${0##*/} -t <days> -d <dir> [FILENAME]"
          echo >&2 ""
          exit 1;
    }
    
    
    ARGS=($@)
    [ -z "$ARGS" ] && usage
    
    FILETYPE=${ARGS[$(($#-1))]}
    [ -z "$FILETYPE" ] && usage
    
    #ARGS=(${ARGS[@]:0:$(($#-1))})
    
    
    for GET in $(seq 0 $((${#ARGS[@]}-2))); do
          case "${ARGS[$GET]}" in
    
                -t)
                      DAYS=${ARGS[$(($GET+1))]}
                      [ -z $DAYS ] && usage
                      #shift; shift;
                ;;
    
                -d)
                      DIR=${ARGS[$(($GET+1))]}
                      [ -z $DIR ] && usage
                      #shift; shift;
                ;;
    
                -h|--help|?)
                      usage
                ;;
    
          esac
    done
    
    echo ""
    echo "DAYS: $DAYS"
    echo "DIR:  $DIR"
    echo "FILE: $FILETYPE"
    echo ""
    Ovviamente, al posto dei commentati shift: shift; devi trovare un modo per eliminare gli elementi che trovi dall'array $ARGS in modo da poter inserire il caso di default *);;

    C'e' shift perche' usavo questo modello per i parametri posizionali, ma come vedi $@ è memorizzato come array quindi le regole sono quelle degli array.

    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

  3. #3
    Grazie
    "Considerate la vostra semenza:
    fatti non foste a viver come bruti,
    ma per seguir virtute e canoscenza''."
    Dante Alighieri

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.