GNU/Linux >> Znalost Linux >  >> Linux

Parametry skriptu v Bash

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í.


Linux
  1. Přidání argumentů a voleb do vašich Bash skriptů

  2. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?

  3. Bash =~ Regex A Https://regex101.com/?

  1. Debian – Přesunutí /var, /home do samostatného oddílu?

  2. Jak změnit montážní body?

  3. ./configure :/bin/sh^M :špatný interpret

  1. Nemůžete spouštět bash skripty ani jako root?

  2. Proč cat /dev/urandom zavěsil můj bash skript?

  3. Jak mohu otestovat svůj Bash skript na starších verzích Bash?