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.