• Opret dig
  • Glemt adgangskode

User account menu

  • Artikler
  • Forside
  • Forum
  • Nyheder
  • Log ind
Hjem
LinuxIN.dk

Snak med

Opret dig!

Af marlar | 19.10.2010 11:35

Teste med regex direkte i bash? [LØST]

Software
Jeg har et lille script hvor man skal indtaste en firecifret kode. Denne kode validerer jeg så med:


Code=$(zenity --title="Kodetest" --text="Indtast den firecifrede kode" --entry)

CodeOk=$(sh -c "echo -n $Code | egrep '^[[:digit:]]{4}\$'")


Det virker perfekt, men jeg tænker bare på om jeg kunne gøre det samme direkte i bash i stedet for at starte en subshell med sh -c kommandoen?

Ps. hvorfor fremhæves de to linjer forskelligt i < code > blokken ?
  • Log ind eller opret dig for at tilføje kommentarer

Kommentarer8

# 1

15 år siden

Permalink

Indsendt af mrbrown79 den 19. oktober 2010 kl. 12:24

Permalink

Noget i stil med følgende måske


echo $Code | egrep --quiet "^[0-9]{4}" && echo "DO WHATEVER SHOULD BE DONE" || echo "CODE NOT OK"
  • Log ind eller opret dig for at tilføje kommentarer

# 2

15 år siden

Permalink

Indsendt af marlar den 19. oktober 2010 kl. 12:30

Permalink

Joh, men jeg skal arbejde

Joh, men jeg skal arbejde videre med testresultatet. Altså:


if [ ! $CodeOk ]; then
zenity --title="Kodetest" --text="Koden skal være på præcis 4 cifre." --info
exit
fi
  • Log ind eller opret dig for at tilføje kommentarer

# 3

15 år siden

Permalink

Indsendt af mrbrown79 den 19. oktober 2010 kl. 13:13

In reply to Joh, men jeg skal arbejde by marlar

Permalink

Så kan du

Enten udskifte echo-kommandoen med noget, der sætter den variabel som du vil arbejde videre med. Eller - hvis muligt i din struktur - indsætte din kode direkte istedet for echo.... a'la:

echo $Code | egrep --quiet "^[0-9]{4}" || (zenity --title="Kodetest" --text="Koden skal være på præcis 4 cifre." --info && exit)
  • Log ind eller opret dig for at tilføje kommentarer

# 4

15 år siden

Permalink

Indsendt af marlar den 19. oktober 2010 kl. 13:56

Permalink

Dit forslag i #3 er en god

Dit forslag i #3 er en god ide og vil virke fint.

I øvrigt er det mere læseligt med [0-9] end [[:digit:]]. Jeg er vant til perl komtatible regex, her skriver man simpelthen \d hvilket er meget mere kompakt og læseligt end [[:digit:]]. Det kan man faktisk også med grep -P, men det er ikke officielt understøttet.
  • Log ind eller opret dig for at tilføje kommentarer

# 5

15 år siden

Permalink

Indsendt af marlar den 19. oktober 2010 kl. 14:10

Permalink

Hmm, det starter fint zenity

Hmm, det starter fint zenity med beskeden om forkert kode, men exit-funktionen virker ikke. Jeg tror der bliver startet en subshell pga. parantesen, og det er så kun dén subshell som exit'er.
  • Log ind eller opret dig for at tilføje kommentarer

# 6

15 år siden

Permalink

Indsendt af marlar den 19. oktober 2010 kl. 14:15

Permalink

Nå, nu fandt jeg så ud af

Nå, nu fandt jeg så ud af at sh -c slet ikke er nødvendig!

Dette virker perfekt:
CodeOk=$(echo $Code | egrep '^[0-9]{4}$')
  • Log ind eller opret dig for at tilføje kommentarer

# 7

15 år siden

Permalink

Indsendt af jakob lund den 19. oktober 2010 kl. 17:11

Permalink

=~ operator

Du kan også gå uden om grep med en =~ operator:


if [[ "$Code" =~ ^[0-9]{4}$ ]]
then
echo "god firecifret kode"
else
echo "fejl"
fi

  • Log ind eller opret dig for at tilføje kommentarer

# 8

15 år siden

Permalink

Indsendt af marlar den 19. oktober 2010 kl. 20:45

Permalink

Super, det var præcis

Super, det var præcis sådan en løsning jeg søgte, men jeg kendte ikke tilde-operatoren.

Et ekstra spørgsmål: hvordan negerer man udtrykket så det er sandt hvis det ikke matcher? Altså hvis man ikke ønsker en else-del, men kun en fejlmelding og en exit hvis koden ikke matcher?
  • Log ind eller opret dig for at tilføje kommentarer

Svar søges

Tid til at lære noget igen 0
TPM 2 0
BigLinux 0
Amerikansk tastatur på dansk tastatur 0
FSF giver flere detaljer om sit nye Librephone projekt 0

Seneste aktivitet

Kontakt til dansk-gruppen 1
Internettet er ved at dø. Vi kan stadig stoppe det 1
Nørder søger nørder: Første Linux-brugergruppe på Mors 3
Østrigsk ministerium smider Microsoft ud til fordel for Nextcloud 1
Brug carburetor til at forblive usynlig online 8
Sådan konfigurerer du flatpaks' flathub til verified only 9
Plasma tapet-skifter 3
How to upgrade to LMDE 7 4
Virksomheder og enheder der kører på Linux 11
NordVPN har udgivet kildekoden til sin grafiske brugergrænseflade 2
Flere og flere bruger Brave browseren 1
LibreOffice og Collabora: Hvorfor er de ikke i skolerne i stedet for Word og Google Docs? 11
Firewall igen 5
Værdien ved open source 2
Sailfish på android telefon 1
Ladybird Browser 7
Satiriske ordspil 3
Kan ikke boote på installation 26
Tilføj signatur til Evolution mail 2
LUKS kryptering - Er der andre der bruger det 15

© 2025 Linuxin og de respektive skribenter

Oprettet og drevet af nørder siden 2004 !