Undvika felinmatning i ett bash script, hur?

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

Undvika felinmatning i ett bash script, hur?

Inlägg av red »

Hej!

Jag behöver ett exempel på vad man kan göra för att undvika felinmatning när användare blir tillfrågade att skriva sitt namn.

Om jag har något t ex som liknar detta:

Kod: Markera allt

#!/bin/bash/
echo "Skriv in ditt namn"
read namn
Och användaren trycker på ENTER utan att skriva ett namn. Då kommer det ett felmeddelande i scriptet. Jag vill undvika att detta kan inträffa. Användaren MÅSTE skriva in ett namn, dvs användaren skall få ett meddelande:
echo "Du måste skriva in ett namn innan du kan fortsätta!"

Samma sak vill jag göra om användaren bara får skriva siffror men skriver ABC istället.

Har kollat lite på det och "grep" kommandot verkar vara till nytta men hur skall man använda det?

Tack!
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Undvika felinmatning i ett bash script, hur?

Inlägg av Konservburk »

Här är ett par förslag på hur du skulle kunna göra:

Kod: Markera allt

echo "Skriv in ditt namn"
until
   read namn
   test -n "$namn"
do echo "Du måste skriva in ett namn innan du kan fortsätta!"
done

Kod: Markera allt

echo "Skriv in bara siffror"
until
   read siffror
   echo ":$siffror" | grep -q '^:[[:digit:]]\+$'
do echo "Du måste skriva in bara siffror innan du kan fortsätta!"
done
Sen är det inte alltid du behöver ta till externa kommandon som grep. Ofta kan det räcka med en enkel matchning i en case-sats istället.
red
Inlägg: 20
Blev medlem: 01 nov 2008, 23:20
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu

Re: Undvika felinmatning i ett bash script, hur?

Inlägg av red »

Konservburk skrev:Här är ett par förslag på hur du skulle kunna göra:

Kod: Markera allt

echo "Skriv in ditt namn"
until
   read namn
   test -n "$namn"
do echo "Du måste skriva in ett namn innan du kan fortsätta!"
done

Kod: Markera allt

echo "Skriv in bara siffror"
until
   read siffror
   echo ":$siffror" | grep -q '^:[[:digit:]]\+$'
do echo "Du måste skriva in bara siffror innan du kan fortsätta!"
done
Sen är det inte alltid du behöver ta till externa kommandon som grep. Ofta kan det räcka med en enkel matchning i en case-sats istället.
TACK!! :)
Skriv svar

Återgå till "Terminalforum"