Portál AbcLinuxu, 5. června 2024 06:58


Dotaz: BASH skript a vytvoreni interaktivniho menu

14.12.2022 15:30 Jix0 | skóre: 24 | blog: Not only for humans
BASH skript a vytvoreni interaktivniho menu
Přečteno: 425×
Odpovědět | Admin
Zdravim.

Chtel bych si upravit jeden ze svych stavajicich skriptu, tak aby jej bylo mozne ovladat ciselnymi volbami v ramci jakehosi interaktivniho menu. Uz chvili s tim bojuji a nedari se mi dosahnout ocekavaneho vysledku.

Ve skriptu mam konstrukci select, ktera mi funguje, avsak pokud chci mit "vnorena" menu pod jednotlivymi volbami, skript se nespusti kvuli chybe parsovani a predpokladam, ze delam neco blbe, resp. ze mam konstrukci blbe zapsanou. Nicmene nemuzu ani za boha prijit na to proc. Potrebuji docilit toho aby napriklad pod volbou cislo 2, bylo dalsi menu s nekolika dalsimi polozkami.

Skript konci s nasledujici chybou:
./menutest.sh: line 14: syntax error near unexpected token `opts'
./menutest.sh: line 14: `                 select opts in "${sub[@]}"'
Pokud me nekdo dokazete navest co je spatne, moc mi tim pomuzete :-)

Konstrukce skriptu je neco takoveho (vzor jsem prevzal z clanku, kde jsem hledal informace):
#!/bin/bash

PS3="Vyberte cislo: "

items=("Item 1" "Item 2" "Item 3")
sub=("TEST 1" "TEST 2" "TEST 3")

while true; do
    select item in "${items[@]}" Quit
    do
        case $REPLY in
            1) echo "Vybrano cislo #$REPLY odpovidajici volbe $item"; break;;
            2) echo "Vybrano cislo #$REPLY odpovidajici volbe $item"; break;;
                 select opts in "${sub[@]}"
                      do
                         case $REPLY in
                        1) echo "TEST OK"; break;;
                         esac
                      done
            3) echo "Vybrano cislo #$REPLY odpovidajici volbe $item"; break;;
            $((${#items[@]}+1))) echo "Konec!"; break 2;;
            *) echo "Neznama volba $REPLY"; break;
        esac
    done
done
If you will not cooperate, you are to be executed! | Starting as a DJ

Řešení dotazu:


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

Odpovědi

Řešení 1× (Jix0 (tazatel))
14.12.2022 16:31 neal_cz | skóre: 29
Rozbalit Rozbalit vše Re: BASH skript a vytvoreni interaktivniho menu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Třeba tak?
#!/bin/bash
 
PS3="Vyberte cislo: "
 
items=("Item 1" "Item 2" "Item 3")
sub=("TEST 1" "TEST 2" "TEST 3")
 
while true; do
    select item in "${items[@]}" Quit
    do
        case $REPLY in
            1) echo "Vybrano cislo #$REPLY odpovidajici volbe $item"; break;;
            2) echo "Vybrano cislo #$REPLY odpovidajici volbe $item";
                 select opts in "${sub[@]}"
                      do
                         case $REPLY in
                        1) echo "TEST OK"; break;;
                         esac
                      done
                      break;;
            3) echo "Vybrano cislo #$REPLY odpovidajici volbe $item"; break;;
            $((${#items[@]}+1))) echo "Konec!"; break 2;;
            *) echo "Neznama volba $REPLY"; break;
        esac
    done
done
15.12.2022 13:44 Jix0 | skóre: 24 | blog: Not only for humans
Rozbalit Rozbalit vše Re: BASH skript a vytvoreni interaktivniho menu
Diky. To je ono. Me sice shellcheck vyhazoval chybu na radku 13, ale asi jsem u toho sedel dlouho a nemohl prijit na to co tam mam spatne. Nyni to funguje.
If you will not cooperate, you are to be executed! | Starting as a DJ
14.12.2022 17:20 X
Rozbalit Rozbalit vše Re: BASH skript a vytvoreni interaktivniho menu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Na radku 13 mas predcasne ukoceny case.
15.12.2022 03:40 tttttttttttttt
Rozbalit Rozbalit vše Re: BASH skript a vytvoreni interaktivniho menu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Na podobné věci používám fzf:

echo "Item 1\nItem 2\nItem 3" | fzf

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.