Napište skript Bash tak, aby přijímal argumenty, které jsou zadány při volání skriptu z příkazového řádku. Tuto metodu použijte, když skript musí provádět mírně odlišnou funkci v závislosti na hodnotách vstupních parametrů, také nazývaných argumenty.
Příklad předávání argumentů v bash skriptu
Pokud jste vytvořili skript s názvem stats.sh že počítá slova v souboru, je nejlepší předat název souboru jako argument, aby bylo možné použít stejný skript pro všechny soubory, které budou zpracovány. Pokud je například název zpracovávaného souboru seznam skladeb, zadejte na příkazovém řádku následující: sh stats.sh seznam skladeb
K argumentům se přistupuje uvnitř skriptu pomocí proměnných 1 $, 2 $, 3 $, a tak dále. Proměnná 1 $ odkazuje na první argument, 2 $ k druhému argumentu, a 3 $ ke třetímu argumentu. Například ve skriptu: FILE1 = $ 1
wc $ SOUBOR1
K hodnotě prvního argumentu přiřaďte proměnnou s popisným názvem (1 $) a poté na proměnnou zavolejte nástroj pro počítání slov (WC) $ FILE1 nebo cokoli jiného, co byste chtěli dělat. Pokud požadujete proměnný počet argumentů, použijte $@ proměnná, což je pole všech vstupních parametrů. Tento postup používá smyčku for k iteračnímu zpracování každé z nich, jak je znázorněno v následujícím příkladu: pro FILE1 v „$@“
dělat
wc $ SOUBOR1
Hotovo
Zde je příklad, jak volat tento skript pomocí argumentů z příkazového řádku: sh stats.sh seznam skladeb1 seznam skladeb2 seznam skladeb3
Pokud argument obsahuje mezery, uzavřete jej do jednoduchých uvozovek. Například: sh stats.sh ‚seznam skladeb 1‘ ‚seznam skladeb 2‘ ‚seznam skladeb 3‘
Metoda vlajek
Často je napsán skript, aby bylo možné předávat argumenty v libovolném pořadí pomocí příznaků. Pomocí metody flags lze některé argumenty nastavit jako volitelné. Napište například skript, který načte informace z databáze na základě zadaných parametrů, jako je například uživatelské jméno, datum, a produkt, a generuje zprávu v zadaném formátu. Skript musí být napsán takovým způsobem, aby byly tyto parametry předávány při volání skriptu. Může to vypadat takto: makereport -u jsmith -p notebooky -d 10-20-2011 -f pdf
class = „ql-syntax“> Bash umožňuje tuto funkci pomocí getopts funkce. Pro výše uvedený příklad použijte getopts následovně: while getopts u: d: p: f: option
dělat
případ „$ {option}“
v
u) USER = $ {OPTARG} ;;
d) DATUM = $ {OPTARG} ;;
p) PRODUKT = $ {OPTARG} ;;
f) FORMÁT = $ {OPTARG} ;;
esac
Hotovo
class = „ql-syntax“> Toto je smyčka while, která používá getopts funkce a tzv optstring-v tomto případě u: d: p: f:– opakovat argumenty. The zatímco smyčka projde optstring, který obsahuje příznaky, které se používají k předávání argumentů, a proměnné přiřadí hodnotu argumentu uvedenou pro tento příznak volba. The případ příkaz pak přiřadí hodnotu proměnné volba na globální proměnnou, která se použije po přečtení všech argumentů.
Významy pro dvojtečky
Dvojtečky v optstringu znamenají, že pro odpovídající příznaky jsou vyžadovány hodnoty. Ve výše uvedeném příkladu u: d: p: f:, za všemi vlajkami následuje dvojtečka. To znamená, že všechny příznaky potřebují hodnotu. Pokud například d a F u vlajek se neočekávalo, že budou mít hodnotu, u: dp: f bude optstring. Počáteční dvojtečka uvádí getopty do „tichého režimu hlášení“. Namísto úplného omylu skriptu vyplní nějaký neočekávaný argument? možnost a podle potřeby ji můžete vyhledat nebo zpracovat. Bez počátečního dvojtečky v optstringu terminál zobrazí chybu. Například mám skript shora, který počítá slova. Očekává syntaxi jako „stats.sh -f název_souboru“. Bez dvojtečky, když zkusím „stats.sh -h“, dostanu: stats.sh -h
stats.sh: nelegální volba – h
Zatímco s dvojtečkou pak mohu do skriptu vložit řádek očekávající něco takového, například -?) Echo „Ne – $ {OPTARG} argument nalezen.“ ;; . To mi pak umožňuje zachytit a zpracovat neočekávaný záznam (v tomto případě výstupem vlastní chybové zprávy). stats.sh -h
Nebyl nalezen argument -h.
Argumenty, kterým předchází příznak, jsou ignorovány getopts. Pokud při volání skriptu nejsou zadány příznaky uvedené v optstringu, nic se nestane, pokud tento případ ve svém kódu zvlášť nezpracujete. Žádné argumenty, které nebyly zpracovány getops lze stále zachytit s pravidelným 1 $, 2 $, a 3 $ proměnné.