getopts kérdés

Hozzászólások

> hogyha kapcsoló nélkül indítom, akkor bejöjjön a súgó

Egyik megoldás: $# mutatja a paraméterek számát, de ebben minden benne van, ezt nem érdekli, hogy az pl. kapcsoló-e, vagy argumentum.

Ha szeretnéd észlelni, hogy nincs opció, noha van egyéb maradék paraméter, akkor pl. ilyesmit lehet:

https://serverfault.com/questions/95077/how-can-i-get-remaining-args-af…

A másik kérdésed nekem nem pontos:

a jelen megoldás pl. "-asd"-re meghívja az addDate, showDate, delDate függvényeket (szkripteket), ha ez kell, ez pipa.

Ha azt szeretnéd, hogy több különböző paraméterre ugyanaz a hívás történjen, a case érti ezt:

  a|d) addDate

Ekkor mind a -a, mind a -d paraméterre az addDate hívódik.  "-ad"-re pedig kétszer.

"pl. a) addDate helyett pl. ad) addDate legyen" - Ebben a felállásban nem, mert a -ad az "-a -d" -nek felel meg. Ha hosszú (több karakteres) kapcsolókat szeretnél, azt --ad formában kell megadnod, de ekkor a getopts nem jó neked, helyette egy while test -n "$1" ciklusban kell a "$1"-et vizsgálnod, és a case ágak végén egy-egy shift-tel kirotálni az aktuális kapcsolót (illetve ha paraméter is tartozik hozzá, akkor azt a $2-ból tudod venni, és shift 2 kell utána).

./progi -a
./progi --ad

A getopts csak az egybetűs argumentumokat és paraméterét képes kezelni.
Van egy getopt nevű segédprogram a Linuxokban, amely getopt -l "ad,masik" módon képes kezelni a long argumentumokat. Esetleg ez jó lehet neked.

$ getopt -l "ad:,masik" -o 'ad:m' -- --ad parametere --masik -am -d dparameter
# élesben a tesztparaméterek helyett -- "$@"

Ezt már egyszerű shellből feldolgozni.
Bővebben:
    https://www.baeldung.com/linux/bash-parse-command-line-arguments
    3. Parsing Long Command-Line Options With getopt     részben.