Portál AbcLinuxu, 13. července 2025 23:55


Dotaz: BASH a getopts

3.8.2010 07:37 ext3fs
BASH a getopts
Přečteno: 840×
Odpovědět | Admin
Ahoj,

premyslim jak v BASHi pomoci getopts pracovat s argumenty prikazoveho radku v tomto duchu:
./script [option1] [NAME1,NAME2,...] [option2]

napr: ./script -a soubor1 soubor2 soubor3 -x
Jde neco takoveho vyresit pomoci getopts bez vymysleni vlastnich rutin pro parsovani argumentu?

Pomoci tohoto pristupu:

while getopts "a:" OPT
do
    case $OPT in
    a)
        for I in ${OPTARG}
        do
            echo $I
        done
    esac
done

mam v OPTARG vzdy aktualni argument, ale ne pole argumentu...

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

3.8.2010 11:37 volvox | skóre: 16
Rozbalit Rozbalit vše Re: BASH a getopts
Odpovědět | | Sbalit | Link | Blokovat | Admin
AFAIK nejde.

Buď uzavřete argument do uvozovek (pak bude skript fungovat, jak má), případně jako oddělovač použít čárku, nebo volbu chápat jako cestu k souboru se seznamem souborů a nebo (pokud je tam možnost, tak asi nejlepší řešení) nechat seznam souborů jako parametr (tj. bez volby):

./script [OPTIONS] [FILE...]

Jinak by vám nezbylo, než si argumenty sám parsovat, ale to bych nedoporučoval - použitá syntaxe je hodně nestandardní, v rámci linuxu jedinečná, řekl bych.
3.8.2010 12:09 ext3fs
Rozbalit Rozbalit vše Re: BASH a getopts
Nestandardni mozna je, ale pouziva ji (nebo podobne syntaxe) spousta nastroju...jmenovite co si z hlavy vzpomenu tak: yum, rsync, apt-get, du, ...
3.8.2010 19:39 volvox | skóre: 16
Rozbalit Rozbalit vše Re: BASH a getopts
Tak to patrně myslíte tu poslední možnost, kterou jsem nastínil, nebo opravdu máte příklad použití s podobnou syntaxí jako v otázce?
4.8.2010 06:22 zulu
Rozbalit Rozbalit vše Re: BASH a getopts
Nepouziva.
4.8.2010 06:58 ext3fs
Rozbalit Rozbalit vše Re: BASH a getopts
A proc by ne?

rpm -i balik1 balik2 balik3 --force
4.8.2010 07:23 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: BASH a getopts
Nejsou ale ty balíky parametr rpm, spíš než přepínače -i? Tedy třeba rpm -i --force balik1 balik2 balik3
4.8.2010 07:30 ext3fs
Rozbalit Rozbalit vše Re: BASH a getopts
Ano jsou. Slo mi presne o to zadavat parametry a prepinace v tomto duchu. Aby prosla prvni i druha varianta. A otazka tedy byla, zda se o to getopts stara. Odpoved je z diskuse jasna.
3.8.2010 13:58 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: BASH a getopts
Odpovědět | | Sbalit | Link | Blokovat | Admin
Da sa. getopts spracuva argument cislo OPTIND. Takze pri -a si napises parsovanie sam az do narazenia na argument zacinajuci na -. Posunies OPTIND a zase zavolas getopts.
If you hold a Unix shell up to your ear, you can you hear the C.
3.8.2010 20:00 volvox | skóre: 16
Rozbalit Rozbalit vše Re: BASH a getopts
Ano, takto by to šlo, řekl bych, že je to tak někde na půl cesty mezi použitím getopts a vlastním parsováním. Ale stejně si myslím, že to není dobrý nápad. getopts se používá na options, tj. volby/přepínače, vstupní parametry pro skript by se takto IMHO předávat neměly.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.