GNU/Linux >> Linux Esercitazione >  >> Linux

Parametri di script in Bash

Se non sei completamente attaccato all'uso di "from" e "to" come nomi delle opzioni, è abbastanza facile implementarlo usando getopts:

while getopts f:t: opts; do
   case ${opts} in
      f) FROM_VAL=${OPTARG} ;;
      t) TO_VAL=${OPTARG} ;;
   esac
done

getopts è un programma che elabora gli argomenti della riga di comando e li analizza comodamente per te.

f:t: specifica che ti aspetti 2 parametri che contengono valori (indicati dai due punti). Qualcosa come f:t:v dice che -v sarà interpretato solo come flag.

opts è dove è memorizzato il parametro corrente. Il case statement è dove lo elaborerai.

${OPTARG} contiene il valore che segue il parametro. ${FROM_VAL} ad esempio otterrà il valore /home/kristoffer/test.png se hai eseguito il tuo script come:

ocrscript.sh -f /home/kristoffer/test.png -t /home/kristoffer/test.txt

Come suggeriscono gli altri, se questa è la prima volta che scrivi script bash dovresti davvero leggere alcune nozioni di base. Questo era solo un breve tutorial su come getopts funziona.


Gli argomenti che fornisci a un bashscript appariranno nelle variabili $1 e $2 e $3 dove il numero si riferisce all'argomento. $0 è il comando stesso.

Gli argomenti sono separati da spazi, quindi se vuoi fornire -from e -to nel comando, finiranno anche in queste variabili, quindi per questo:

./ocrscript.sh -from /home/kristoffer/test.png -to /home/kristoffer/test.txt

Otterrai:

$0    # ocrscript.sh
$1    # -from
$2    # /home/kristoffer/test.png
$3    # -to
$4    # /home/kristoffer/test.txt

Potrebbe essere più semplice omettere il -from e il -to , come:

ocrscript.sh /home/kristoffer/test.png /home/kristoffer/test.txt

Allora avrai:

$1    # /home/kristoffer/test.png
$2    # /home/kristoffer/test.txt

Lo svantaggio è che dovrai fornirlo nell'ordine giusto. Ci sono librerie che possono rendere più semplice l'analisi di argomenti con nome sulla riga di comando, ma di solito per semplici script di shell dovresti semplicemente usare il modo più semplice, se non è un problema.

Allora puoi fare:

/usr/local/bin/abbyyocr9 -rl Swedish -if "$1" -of "$2" 2>&1

Le doppie virgolette attorno a $1 e il $2 non sono sempre necessarie ma sono consigliate, perché alcune stringhe non funzioneranno se non le metti tra virgolette.


Usa le variabili "$1" , "$2" , "$3" e così via per accedere agli argomenti. Per accedervi tutti puoi usare "[email protected]" , o per ottenere il conteggio degli argomenti $# (potrebbe essere utile per verificare la presenza di troppi o pochi argomenti).


Avevo bisogno di assicurarmi che i miei script fossero interamente portabili tra varie macchine, shell e persino versioni di Cygwin. Inoltre, i miei colleghi per i quali ho dovuto scrivere gli script sono programmatori, quindi ho finito per usare questo:

for ((i=1;i<=$#;i++)); 
do

    if [ ${!i} = "-s" ] 
    then ((i++)) 
        var1=${!i};

    elif [ ${!i} = "-log" ];
    then ((i++)) 
        logFile=${!i};  

    elif [ ${!i} = "-x" ];
    then ((i++)) 
        var2=${!i};    

    elif [ ${!i} = "-p" ]; 
    then ((i++)) 
        var3=${!i};

    elif [ ${!i} = "-b" ];
    then ((i++)) 
        var4=${!i};

    elif [ ${!i} = "-l" ];
    then ((i++)) 
        var5=${!i}; 

    elif [ ${!i} = "-a" ];
    then ((i++)) 
        var6=${!i};
    fi

done;

Spiegazione:ho incluso un launcher.sh script, poiché l'intera operazione prevedeva diversi passaggi quasi indipendenti l'uno dall'altro (sto dicendo "quasi", perché anche se ogni script poteva essere eseguito da solo, di solito venivano eseguiti tutti insieme), e in due giorni ho scoperto che circa la metà dei miei colleghi, essendo programmatori e tutto il resto, erano troppo bravi per utilizzare il file di avvio, seguire l '"utilizzo" o leggere l'AIUTO che veniva visualizzato ogni volta che facevano qualcosa di sbagliato e stavano facendo un pasticcio dell'intera faccenda, eseguendo script con argomenti nell'ordine sbagliato e lamentandosi del fatto che gli script non funzionassero correttamente. Essendo il collerico che sono, ho deciso di revisionare tutti i miei copioni per assicurarmi che fossero a prova di collega. Il segmento di codice sopra era la prima cosa.


Linux
  1. Aggiunta di argomenti e opzioni ai tuoi script Bash

  2. Come impostare i parametri quando Pipe Bash Script su Bash?

  3. Come modificare i punti di montaggio?

  4. Come passare i parametri a uno script Bash?

  5. Perché cat /dev/urandom ha bloccato il mio script bash?

35 Esempi di script Bash

Impossibile eseguire script bash anche come root?

Qual è la differenza tra #!/usr/bin/env bash e #!/usr/bin/bash?

Esegui il comando bash sulla pipeline jenkins

Quando dovrei usare /dev/shm/ e quando dovrei usare /tmp/?

I siti web dovrebbero vivere in /var/ o /usr/ in base all'utilizzo consigliato?