Bash meny fråga

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
red
Inlägg: 20
Blev medlem: 01 nov 2008, 23:20
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu

Bash meny fråga

Inlägg av red »

Hej!

Jag är ny när de gäller bash scripting så jag hoppas ni förstår jag vad vill komma fram till :) Håller på med en övning som jag blir galen på för jag vet inte hur jag ska avsluta den.

Jag har tyvärr ingen kod att visa upp för den ligger på en dator jag inte kommer åt för tillfället men jag skall försöka förklara så tydligt som möjligt:

Jag har 1 script med flera funktioner:

1. Sudo manual
2. Filstruktur manual
3. Övrigt
4. Exit

Alla dessa val skall representeras via en meny.

Grejen är att jag har tittat på olika menyer man kan skriva men problemet är att jag har redan skrivit 400rader kod ungefär såhär:

###### Sudo manual ######
function manual {
< TEXT >
}
# Slut
###### Filstruktur Manual ######
function filstruktur {
< TEXT >
}
# Slut

Varje manual har en function (om det nu är möjligt att göra så).
Själva idén jag hade var att skriva all kod först å på något sätt länka dessa med en function som anropas via menyval.

Trycker jag på 1an i menyn högst upp så skall t ex function manual anropas och då visas det jag skrivit efter ######## Sudo Manual #####.

Trycker jag på 2an så skall all text jag skrivit efter #### Filstruktur manual #### dyka upp.

Detta kanske är praktiskt omöjligt men då undrar jag.. Hur i efterhand ska jag göra för att anropa dessa olika delarna med en meny?

Hoppas jag inte rört till det för mkt :)
Senast redigerad av 1 red, redigerad totalt 20 gånger.
Användarvisningsbild
Ulsak
Inlägg: 4808
Blev medlem: 06 aug 2007, 19:04
OS: Ubuntu
Utgåva: 22.04 Jammy Jellyfish LTS
Ort: Göteborg

Re: Bash meny fråga

Inlägg av Ulsak »

japp, det är knäckfrågan hur man anropar den text som skall finnas. vad använder du för textredigerare? Kate, Nano eller Gedit. Den sistnämnda brukar vara smidig då den färgar koden..
red
Inlägg: 20
Blev medlem: 01 nov 2008, 23:20
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu

Re: Bash meny fråga

Inlägg av red »

Ulsak skrev:japp, det är knäckfrågan hur man anropar den text som skall finnas. vad använder du för textredigerare? Kate, Nano eller Gedit. Den sistnämnda brukar vara smidig då den färgar koden..
Jag kör med vi ;)
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Bash meny fråga

Inlägg av Konservburk »

Här har du ett exempel på hur det kan se ut:

Kod: Markera allt

#!/bin/bash

funktion_A(){
   echo A
}
funktion_B(){
   echo B
}
funktion_C(){
   echo C
}

select REPLY
in foo bar baz
do case "$REPLY"
   in
   foo) funktion_A ;;
   bar) funktion_B ;;
   baz) funktion_C ;;
   *) continue ;;
   esac
   break
done
Användarvisningsbild
mcNisse
Inlägg: 5211
Blev medlem: 06 feb 2007, 20:51
OS: Debian
Utgåva: Vet inte/ingen utgåva passar

Re: Bash meny fråga

Inlägg av mcNisse »

Kan det var något sådant här du är ute efter (mycket ofullständigt)?

Kod: Markera allt

while true
do
    printmenu
    echo "Choose (1-4 0, exit)"
    read ans
    case $ans in
        0) break
            ;;
        1) val1
           ;;
        2) val2
           ;;
        osv
        *)
            echo "musch chooose a number between 1-4"
             ::
     ecac
done
red
Inlägg: 20
Blev medlem: 01 nov 2008, 23:20
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu

Re: Bash meny fråga

Inlägg av red »

Konservburk skrev:Här har du ett exempel på hur det kan se ut:

Kod: Markera allt

#!/bin/bash

funktion_A(){
   echo A
}
funktion_B(){
   echo B
}
funktion_C(){
   echo C
}

select REPLY
in foo bar baz
do case "$REPLY"
   in
   foo) funktion_A ;;
   bar) funktion_B ;;
   baz) funktion_C ;;
   *) continue ;;
   esac
   break
done
Jag har i stort sett det upplägget du beskrev men vad som händer nu är att funktion_A körs automatiskt så fort man kör scriptet, trycker du på ENTER (som är ogiltigt val) går den över till funktion_B. gör du samma sak här, DÅ visas menyn!

Jag vill ju att den ska visas först :(
red
Inlägg: 20
Blev medlem: 01 nov 2008, 23:20
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu

Re: Bash meny fråga

Inlägg av red »

red skrev:
Konservburk skrev:Här har du ett exempel på hur det kan se ut:

Kod: Markera allt

#!/bin/bash

funktion_A(){
   echo A
}
funktion_B(){
   echo B
}
funktion_C(){
   echo C
}

select REPLY
in foo bar baz
do case "$REPLY"
   in
   foo) funktion_A ;;
   bar) funktion_B ;;
   baz) funktion_C ;;
   *) continue ;;
   esac
   break
done
Jag har i stort sett det upplägget du beskrev men vad som händer nu är att funktion_A körs automatiskt så fort man kör scriptet, trycker du på ENTER (som är ogiltigt val) går den över till funktion_B. gör du samma sak här, DÅ visas menyn!

Jag vill ju att den ska visas först :(

EDIT: Jag såg att jag hade anrop till funktionen direkt efter } och när man tog bort dessa på funktion_A och funktion_B då visas menyn först.

Nu e problemet att trycker man på 1a valet så händer ingenting, samma med 2an i menyläget.

Menyn e såhär och ligger längst ner bland koden, dvs efter funktion smanual och funktion fmanual.

select menyval
in "Sudo manual" "Filsystem" "Avsluta"
do case "$menyval"
in
Sudo) smanual ;;
Filsystem) fmanual ;;
Avsluta) exit ;;
esac
done
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Bash meny fråga

Inlägg av Konservburk »

red skrev:Nu e problemet att trycker man på 1a valet så händer ingenting, samma med 2an i menyläget.

Menyn e såhär och ligger längst ner bland koden, dvs efter funktion smanual och funktion fmanual.

select menyval
in "Sudo manual" "Filsystem" "Avsluta"
do case "$menyval"
in
Sudo) smanual ;;
Filsystem) fmanual ;;
Avsluta) exit ;;
esac
done
Det första valetalternativet fungerar inte för dig eftersom du har satt det till "Sudo manual", men du matchar bara mot "Sudo" i case-satsen. Det här borde gå bättre:

Kod: Markera allt

select menyval
in "Sudo manual" "Filsystem" "Avsluta"
do case "$menyval"
   in
   "Sudo manual") smanual ;;
   "Filsystem") fmanual ;;
   "Avsluta") exit ;;
   esac
done
red
Inlägg: 20
Blev medlem: 01 nov 2008, 23:20
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu

Re: Bash meny fråga

Inlägg av red »

Konservburk skrev:
red skrev:Nu e problemet att trycker man på 1a valet så händer ingenting, samma med 2an i menyläget.

Menyn e såhär och ligger längst ner bland koden, dvs efter funktion smanual och funktion fmanual.

select menyval
in "Sudo manual" "Filsystem" "Avsluta"
do case "$menyval"
in
Sudo) smanual ;;
Filsystem) fmanual ;;
Avsluta) exit ;;
esac
done
Det första valetalternativet fungerar inte för dig eftersom du har satt det till "Sudo manual", men du matchar bara mot "Sudo" i case-satsen. Det här borde gå bättre:

Kod: Markera allt

select menyval
in "Sudo manual" "Filsystem" "Avsluta"
do case "$menyval"
   in
   "Sudo manual") smanual ;;
   "Filsystem") fmanual ;;
   "Avsluta") exit ;;
   esac
done
I love you! Nu har jag äntligen fått det att fungera efter 9timmar :D
Skriv svar

Återgå till "Terminalforum"