Kísérletezgetek ezzel a lehetőséggel. De még nem értem eléggé.
while getopts "adsh" option; do
case "${option}" in
a) addDate ;;
d) delDate ;;
s) showDate ;;
h) usage ;;
\?) echo "Súgó: program -h "
exit;;
esac
done
Viszont ezzel így nem működik az az opció, hogyha kapcsoló nélkül indítom, akkor bejöjjön a súgó. Az is érdekelne hogy megoldható-e az hogy pl. a) addDate helyett pl. ad) addDate legyen. Ez persze itt most csak egy példa, de szükségem volna ilyesmire máshol, ahol vegyesen vannak a kapcsolók, -o vagy -od, -v ,-vs mert másképpen nem tudtam megoldani. Persze az most működik sima while shift-tel. De kérdés kiválthatom-e, érdemes-e ere a getopts-ra. Mindettől függetlenül a paraméter nélküli indításra előjöhetne a súgó.
- 160 megtekinté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.
- A hozzászóláshoz be kell jelentkezni
"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).
- A hozzászóláshoz be kell jelentkezni
./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.
- A hozzászóláshoz be kell jelentkezni