Chcę zrobić coś takiego że przy odpaleniu skrypu muszę podać dwie opcje np -c -a
Pierwszy argument (c||a) odpowiednie narzędzie i dla nich (a || b || c || d ) czyli co ma się wykonać np a odczytuje, b zapisuje, d robi backup d przywraca backup.
Pierwsza cześć kodu się wykona (przy za komentowaniu drugiej cześci) ale przy a) wywala błąd.
getopts nie można zagnieżdżać? jak powinien wyglądać taki szkielet poprawnie?
while getopts ":ca" opt
do
case "${opt}" in
c)
while getopts ":abcd" opt2
do
case "${opt2}" in
e)
echo "ok -a"
;;
d)
echo "ok -b"
;;
k)
echo "ok -c"
;;
j)
echo "ok -d"
;;
*)
echo "Invalid option: -$OPTARG" >&2
exit 1
;;
esac
done
a)
while getopts ":abcd" opt2
do
case "${opt2}" in
e)
echo "ok -a"
;;
d)
echo "ok -b"
;;
k)
echo "ok -c"
;;
j)
echo "ok -d"
;;
*)
echo "Invalid option: -$OPTARG" >&2
exit 1
;;
esac
done
esac
done
Alternatywa
#!/bin/bash
HELP() {
echo " -c -k Odczytuje k "
echo " -c -l Odczytuje l "
echo " -c -m Odczytuje m "
echo " -c -n Odczytuje n "
echo " -a -r Zapisuje r "
echo " -a -s Zapisuje s "
echo " -a -t Zapisuje t "
echo " -a -u Zapisuje u "
}
OPCJA_C() {
case "$1" in
-k|-K) echo "Odczytuje k" ;;
-l|-L) echo "Odczytuje l" ;;
-m|-M) echo "Odczytuje m" ;;
-n|-N) echo "Odczytuje n" ;;
*) echo "Zly drugi parametr $1" ; echo "Jezeli potrzebujesz pomocy uzyj komendy: $0 --help" ;;
esac
}
OPCJA_A() {
case "$1" in
-r|-R) echo "Zapisuje r" ;;
-s|-S) echo "Zapisuje s" ;;
-t|-T) echo "Zapisuje t" ;;
-u|-U) echo "Zapisuje u" ;;
*) echo "Zly drugi parametr $1" ; echo "Jezeli potrzebujesz pomocy uzyj komendy: $0 --help" ;;
esac
}
case "$1" in
-c|-C) OPCJA_C "$2" ;;
-a|-A) OPCJA_A "$2" ;;
-h|--help) HELP ;;
*) echo "Zly pierwszy parametr $1" ; echo "Jezeli potrzebujesz pomocy uzyj komendy: $0 --help" ;;
esac
Edycja
Zmienilem slowa argument na slowa parametr.
Panas W swoim przykladzie dałeś
case "${opt2}" in
e)
echo "ok -a"
Pomyliłeś się, dałeś "e" zamiast "a"
Kiedy tworzyles na poczatku pierwszy " case "
while getopts ":ca" opt
do
case "${opt}" in
c)
a)
esac
done
Zapomniales dac sredniki " ;; " na koncu kazdej opcji.