Sida 1 av 1

Ett script som loopar

Postat: 07 nov 2017, 12:11
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"

Re: Ett script som loopar

Postat: 19 dec 2017, 23:13
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

Re: Ett script som loopar

Postat: 20 dec 2017, 21:50
av Mekaniserad Apelsin
Raden

while : do


ska vara

while : ; do

Re: Ett script som loopar

Postat: 21 dec 2017, 11:35
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

Re: Ett script som loopar

Postat: 21 dec 2017, 17:30
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.

Re: Ett script som loopar

Postat: 22 dec 2017, 09:24
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!

Re: Ett script som loopar

Postat: 26 dec 2017, 08:50
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

Re: Ett script som loopar

Postat: 26 dec 2017, 08:51
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 :)