Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
look2
Inlägg: 523 Blev medlem: 09 jan 2007, 23:12
Ort: Arboga
Inlägg
av look2 » 07 nov 2017, 12:11
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"
Mekaniserad Apelsin
Hedersmedlem
Inlägg: 3777 Blev medlem: 27 maj 2006, 12:24
OS: Ubuntu
Ort: Stockholm
Kontakt:
Inlägg
av Mekaniserad Apelsin » 19 dec 2017, 23:13
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
Barre
Inlägg: 2298 Blev medlem: 13 dec 2006, 10:23
OS: Ubuntu
Ort: Stockholm
Kontakt:
Inlägg
av Barre » 21 dec 2017, 11:35
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
Mekaniserad Apelsin
Hedersmedlem
Inlägg: 3777 Blev medlem: 27 maj 2006, 12:24
OS: Ubuntu
Ort: Stockholm
Kontakt:
Inlägg
av Mekaniserad Apelsin » 21 dec 2017, 17:30
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.
johanre
Serveradmin
Inlägg: 3888 Blev medlem: 22 okt 2006, 09:13
OS: Ubuntu
Utgåva: 22.04 Jammy Jellyfish LTS
Ort: Malmö
Inlägg
av johanre » 22 dec 2017, 09:24
Off-topic så det skriker om det, men ändå: kul att se både Barre och Mekaniserad Apelsin titta in på forumet igen!
Barre
Inlägg: 2298 Blev medlem: 13 dec 2006, 10:23
OS: Ubuntu
Ort: Stockholm
Kontakt:
Inlägg
av Barre » 26 dec 2017, 08:50
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
Barre
Inlägg: 2298 Blev medlem: 13 dec 2006, 10:23
OS: Ubuntu
Ort: Stockholm
Kontakt:
Inlägg
av Barre » 26 dec 2017, 08:51
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