Ett script som loopar

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
look2
Inlägg: 523
Blev medlem: 09 jan 2007, 23:12
Ort: Arboga

Ett script som loopar

Inlägg av look2 »

Hej !

Försöker göra ett script med en liten meny, har gjort följande:

Kod: Markera allt

#!/bin/bash


clear
echo "Var vill du skapa en anknytning?"
PS3='Var vänlig gör ett val -> '
options=("Stockholm" "Göteborg" "Malmö" "Västerås" "Eskilstuna" "Söderhamn" "Sundsvall" "Örebro" "Örnsköldsvik    " "Norrköping" "Allingsås" "Bollnäs       " "Borlänge" "Borås" "Falun" "Filipstad" "Helsingborg" "Jönköping     " "Karlstad" "Lidköping" "Linköping" "Mariestad" "Sala" "Skövde" "Växjö" "Avsluta")
select opt in "${options[@]}"
do
    case $opt in
        "Stockholm")
            echo "Listar lediga anknytningar i Stockholm"
			vacant_number --number-type EX --number-range 39000..39999 | head -n 40 | grep 'Number range:' | cut -f2- -d:
			echo ""
			vacant_number --number-type EX --number-range 36100..36199 | head -n 40 | grep 'Number range:' | cut -f2- -d:
			echo ""
			vacant_number --number-type EX --number-range 63100..63199 | head -n 40 | grep 'Number range:' | cut -f2- -d:
			./new_mex2.sh
			
            ;;
        "Göteborg")
			echo "Listar lediga anknytningar i Göteborg"
			vacant_number --number-type EX --number-range 14700..14999 | head -n 40 | grep 'Number range:' | cut -f2- -d:
			
          "Avsluta")
            break
            ;;
        *) echo Felaktigt val;;
    esac
done
Hur gör jag för att menyn med val skall visas igen när skriptet är klart?
JAg får bara texten "Gör ett val att visas, inte menyn med de olika valen"
Användarvisningsbild
Mekaniserad Apelsin
Hedersmedlem
Inlägg: 3777
Blev medlem: 27 maj 2006, 12:24
OS: Ubuntu
Ort: Stockholm
Kontakt:

Re: Ett script som loopar

Inlägg av Mekaniserad Apelsin »

Om du är väldigt förtjust i att använda en select är dina val troligen att antingen upprepa frågan mellan esac och done, wrappa allt från clear till sista done med en while:; [kod]; done och skriva en break mellan esac och done:

Kod: Markera allt

clear
while : do 
echo "Var vill du skapa en anknytning?"
PS3='Var vänlig gör ett val -> '
options=("Stockholm" "Göteborg" "Malmö" "Västerås" "Eskilstuna" "Söderhamn" "Sundsvall" "Örebro" "Örnsköldsvik    " "Norrköping" "Allingsås" "Bollnäs       " "Borlänge" "Borås" "Falun" "Filipstad" "Helsingborg" "Jönköping     " "Karlstad" "Lidköping" "Linköping" "Mariestad" "Sala" "Skövde" "Växjö" "Avsluta")
select opt in "${options[@]}"
do
    case $opt in
        "Stockholm")
            echo "Listar lediga anknytningar i Stockholm"
         vacant_number --number-type EX --number-range 39000..39999 | head -n 40 | grep 'Number range:' | cut -f2- -d:
         echo ""
         vacant_number --number-type EX --number-range 36100..36199 | head -n 40 | grep 'Number range:' | cut -f2- -d:
         echo ""
         vacant_number --number-type EX --number-range 63100..63199 | head -n 40 | grep 'Number range:' | cut -f2- -d:
         ./new_mex2.sh
         
            ;;
        "Göteborg")
         echo "Listar lediga anknytningar i Göteborg"
         vacant_number --number-type EX --number-range 14700..14999 | head -n 40 | grep 'Number range:' | cut -f2- -d:
         
          "Avsluta")
            break
            ;;
        *) echo Felaktigt val;;
    esac
break
done
done
More Mekaniserad at http://blippe.se.
Användarvisningsbild
Mekaniserad Apelsin
Hedersmedlem
Inlägg: 3777
Blev medlem: 27 maj 2006, 12:24
OS: Ubuntu
Ort: Stockholm
Kontakt:

Re: Ett script som loopar

Inlägg av Mekaniserad Apelsin »

Raden

while : do


ska vara

while : ; do
More Mekaniserad at http://blippe.se.
Användarvisningsbild
Barre
Inlägg: 2298
Blev medlem: 13 dec 2006, 10:23
OS: Ubuntu
Ort: Stockholm
Kontakt:

Re: Ett script som loopar

Inlägg av Barre »

Du kan använda dig av REPLY variablen istället och sen nollställa den efter din case/esac (dessutom hade du glömt ;; i göteborg )

Kod: Markera allt

#!/bin/bash

clear
echo "Var vill du skapa en anknytning?"
PS3='Var vänlig gör ett val -> '
options=("Stockholm" "Göteborg" "Malmö" "Västerås" "Eskilstuna" "Söderhamn" "Sundsvall" "Örebro" "Örnsköldsvik" "Norrköping" "Allingsås" "Bollnäs       " "Borlänge" "Borås" "Falun" "Filipstad" "Helsingborg" "Jönköping     " "Karlstad" "Lidköping" "Linköping" "Mariestad" "Sala" "Skövde" "Växjö" "Avsluta")
select opt in "${options[@]}"
do
    case "${options[$REPLY-1]}" in
        "Stockholm")
            echo "Listar lediga anknytningar i Stockholm"
         vacant_number --number-type EX --number-range 39000..39999 | head -n 40 | grep 'Number range:' | cut -f2- -d:
         echo ""
         vacant_number --number-type EX --number-range 36100..36199 | head -n 40 | grep 'Number range:' | cut -f2- -d:
         echo ""
         vacant_number --number-type EX --number-range 63100..63199 | head -n 40 | grep 'Number range:' | cut -f2- -d:
         ./new_mex2.sh
         
            ;;
        "Göteborg")
         echo "Listar lediga anknytningar i Göteborg"
         vacant_number --number-type EX --number-range 14700..14999 | head -n 40 | grep 'Number range:' | cut -f2- -d:
         ;;

	 "Avsluta")
           break
           ;;
        *) echo Felaktigt val;;
    esac
    REPLY=
done
________________________________________________________________
twitter @ BarreGargamel
blogg @ Gargamel.NU
Användarvisningsbild
Mekaniserad Apelsin
Hedersmedlem
Inlägg: 3777
Blev medlem: 27 maj 2006, 12:24
OS: Ubuntu
Ort: Stockholm
Kontakt:

Re: Ett script som loopar

Inlägg av Mekaniserad Apelsin »

Mekaniserad Apelsin skrev:Raden

while : do


ska vara

while : ; do
Och "break" i avsluta ska vara "break 2". Med bara break är den en implicit etta efter, och man bryter bara en loop (i detta fallet select), men en explicit tvåa så bryter man sig ur både select och while-looparna.
More Mekaniserad at http://blippe.se.
Användarvisningsbild
johanre
Serveradmin
Inlägg: 3888
Blev medlem: 22 okt 2006, 09:13
OS: Ubuntu
Utgåva: 22.04 Jammy Jellyfish LTS
Ort: Malmö

Re: Ett script som loopar

Inlägg av johanre »

Off-topic så det skriker om det, men ändå: kul att se både Barre och Mekaniserad Apelsin titta in på forumet igen!
Användarvisningsbild
Barre
Inlägg: 2298
Blev medlem: 13 dec 2006, 10:23
OS: Ubuntu
Ort: Stockholm
Kontakt:

Re: Ett script som loopar

Inlägg av Barre »

Mekaniserad Apelsin skrev:
Mekaniserad Apelsin skrev:Raden

while : do


ska vara

while : ; do
Och "break" i avsluta ska vara "break 2". Med bara break är den en implicit etta efter, och man bryter bara en loop (i detta fallet select), men en explicit tvåa så bryter man sig ur både select och while-looparna.
Behövs ju inte en while loop ju :P
________________________________________________________________
twitter @ BarreGargamel
blogg @ Gargamel.NU
Användarvisningsbild
Barre
Inlägg: 2298
Blev medlem: 13 dec 2006, 10:23
OS: Ubuntu
Ort: Stockholm
Kontakt:

Re: Ett script som loopar

Inlägg av Barre »

johanre skrev:Off-topic så det skriker om det, men ändå: kul att se både Barre och Mekaniserad Apelsin titta in på forumet igen!
Hahaha.. har aldrig lämnat, smyger i skuggorna :)
________________________________________________________________
twitter @ BarreGargamel
blogg @ Gargamel.NU
Skriv svar

Återgå till "Terminalforum"