Jak předávat argumenty do skriptu Bash

Příkazy, syntaxe a příklady

Můžete napsat skript bash , který přijímá argumenty zadané při volání skriptu z příkazového řádku. Tato metoda se používá, když má skript provádět mírně odlišnou funkci v závislosti na hodnotách vstupních parametrů (argumenty).

Například můžete mít skript nazvaný "stats.sh", který provádí určitou operaci v souboru, například počítání jeho slov. Chcete-li tento skript použít v mnoha souborech, je nejlepší předat název souboru jako argument, abyste mohli použít stejný skript pro všechny soubory, které mají být zpracovány. Například pokud název souboru, který chcete zpracovat, je "seznam písní", zadejte následující příkazový řádek:

sh stats.sh songlist

Argumenty jsou přístupné uvnitř skriptu pomocí proměnných $ 1, $ 2, $ 3, atd., Kde $ 1 odkazuje na první argument, $ 2 na druhý argument a tak dále. To je ilustrováno v následujícím příkladu:

FILE1 = $ 1 wc $ FILE1

Chcete-li čitelnost, přiřaďte proměnné s popisným názvem na hodnotu prvního argumentu ($ 1) a poté zavolejte na tuto proměnnou ($ FILE1) nástroj pro čtení slov ( wc ).

Pokud máte proměnné množství argumentů, můžete použít proměnnou "$ @", která je pole všech vstupních parametrů. To znamená, že můžete použít pro smyčku iterativně zpracovat každou z nich, jak je ilustrováno v následujícím příkladu:

pro SOUBOR1 v "$ @" do wc $ FILE1 hotovo

Zde je příklad, jak volat tento skript s argumenty z příkazového řádku:

sh stats.sh songlist1 songlist2 songlist3

Pokud má argument mezery, musíte jej uzavřít jednoduchými uvozovkami. Například:

sh stats.sh 'songlist 1' 'songlist 2' 'songlist 3'

Často je psaný skript tak, že uživatel může předávat argumenty v libovolném pořadí pomocí příznaků. Pomocí metody Flags můžete také některé argumenty provést volitelně.

Řekněme, že máte skript, který načte informace z databáze na základě zadaných parametrů, jako je "uživatelské jméno", "datum" a "produkt" a generuje sestavu ve specifikovaném "formátu". Nyní chcete napsat svůj skript, abyste mohli předat tyto parametry při volání skriptu. Může to vypadat takto:

makereport -u jsmith -p notebooky -d 10-20-2011 -f pdf

Bash umožňuje tuto funkci pomocí funkce "getopts". Pro výše uvedený příklad byste mohli použít getopty takto:

Toto je momentální smyčka, která využívá funkci "getopts" a takzvaný "optstring", v tomto případě "u: d: p: f:" pro opakování argumentů. Momentová smyčka prochází skrz optstring, který obsahuje příznaky, které lze použít k předávání argumentů a přiřadí hodnotu parametru poskytnutou pro tuto příznak proměnné "možnost". Příkaz pro případ pak přiřadí hodnotu proměnné "možnost" globální proměnné, která se může použít po přečtení všech argumentů.

Tóny dvojbodky v optstringu znamenají, že pro příslušné příznaky jsou požadovány hodnoty. Ve výše uvedeném příkladu jsou všechny příznaky následovány dvojtečkou: "u: d: p: f:". To znamená, že všechny příznaky potřebují hodnotu. Pokud by například příznaky "d" a "f" neočekávaly hodnotu, optstring by byl "u: dp: f".

Čárka na začátku optstringu, například ": u: d: p: f:", má zcela jiný význam. Umožňuje vám pracovat s vlajkami, které nejsou v optstringu zastoupeny. V takovém případě je hodnota proměnné "opce" nastavena na "?" a hodnota parametru "OPTARG" je nastavena na neočekávaný příznak. Umožňuje zobrazit vhodnou chybovou zprávu informující uživatele o chybě.

Argumenty, které před příznakem nepředchází, jsou getopty ignorovány. Pokud nejsou příznaky zadané v optstringu poskytovány při volání skriptu, nedojde k žádnému, pokud se s tímto případem zvlášť nezabýváte ve svém kódu. Jakékoliv argumenty, které nebyly zpracovány pomocí getů, lze stále zachytit pomocí běžných proměnných $ 1, $ 2 atd.