Pokud nejste zcela oddáni používání „od“ a „do“ jako názvů možností, je poměrně snadné to implementovat pomocí getopts:
while getopts f:t: opts; do
case ${opts} in
f) FROM_VAL=${OPTARG} ;;
t) TO_VAL=${OPTARG} ;;
esac
done
getopts
je program, který zpracovává argumenty příkazového řádku a pohodlně je analyzuje za vás.
f:t:
určuje, že očekáváte 2 parametry, které obsahují hodnoty (označené dvojtečkou). Něco jako f:t:v
říká, že -v
bude interpretováno pouze jako příznak.
opts
je místo, kde je uložen aktuální parametr. case
prohlášení je místo, kde to zpracujete.
${OPTARG}
obsahuje hodnotu následující za parametrem. ${FROM_VAL}
například získá hodnotu /home/kristoffer/test.png
pokud jste spustili skript jako:
ocrscript.sh -f /home/kristoffer/test.png -t /home/kristoffer/test.txt
Jak navrhují ostatní, pokud píšete bash skripty poprvé, měli byste si opravdu přečíst některé základy. Toto byl jen rychlý návod jak getopts
funguje.
Argumenty, které poskytnete bashscriptu, se objeví v proměnných $1
a $2
a $3
kde číslo odkazuje na argument. $0
je samotný příkaz.
Argumenty jsou odděleny mezerami, takže pokud byste uvedli -from
a -to
v příkazu skončí také v těchto proměnných, takže pro toto:
./ocrscript.sh -from /home/kristoffer/test.png -to /home/kristoffer/test.txt
Získáte:
$0 # ocrscript.sh
$1 # -from
$2 # /home/kristoffer/test.png
$3 # -to
$4 # /home/kristoffer/test.txt
Může být jednodušší vynechat -from
a -to
, jako:
ocrscript.sh /home/kristoffer/test.png /home/kristoffer/test.txt
Pak budete mít:
$1 # /home/kristoffer/test.png
$2 # /home/kristoffer/test.txt
Nevýhodou je, že jej budete muset dodávat ve správném pořadí. Existují knihovny, které mohou usnadnit analýzu pojmenovaných argumentů na příkazovém řádku, ale obvykle byste pro jednoduché skripty shellu měli použít jednoduchý způsob, pokud to není problém.
Pak můžete udělat:
/usr/local/bin/abbyyocr9 -rl Swedish -if "$1" -of "$2" 2>&1
Dvojité uvozovky kolem $1
a $2
nejsou vždy nutné, ale doporučují se, protože některé řetězce nebudou fungovat, pokud je nedáte do dvojitých uvozovek.
Použijte proměnné "$1"
, "$2"
, "$3"
a tak dále pro přístup k argumentům. Pro přístup ke všem z nich můžete použít "[email protected]"
, nebo získat počet argumentů $#
(může být užitečné zkontrolovat příliš málo nebo příliš mnoho argumentů).
Potřeboval jsem se ujistit, že moje skripty jsou zcela přenosné mezi různými stroji, shelly a dokonce i verzemi cygwin. Navíc moji kolegové, pro které jsem musel psát skripty, jsou programátoři, takže jsem nakonec použil toto:
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;
Odůvodnění:Zahrnul jsem launcher.sh
také skript, protože celá operace měla několik kroků, které byly na sobě kvazi nezávislé (říkám „kvazi“, protože i když každý skript mohl být spuštěn samostatně, obvykle byly všechny spuštěny společně) a ve dvou dní jsem zjistil, že asi polovina mých kolegů, kteří jsou programátoři a všichni, byli příliš dobří na to, aby používali spouštěcí soubor, postupovali podle „používání“ nebo četli NÁPOVĚDU, která se zobrazila pokaždé, když udělali něco špatně a dělali nepořádek celé věci, spouštění skriptů s argumenty ve špatném pořadí a stěžování si, že skripty nefungují správně. Protože jsem cholerik, rozhodl jsem se přepracovat všechny své scénáře, abych se ujistil, že jsou odolné vůči kolegům. Segment kódu výše byl první věcí.