• 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 1 måned 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 1 måned 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 1 måned 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 1 måned 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 1 måned 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 1 måned 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 1 måned 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 1 måned 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

KDE overgår indsamlingsmålet for 2025 med rekordstor støtte fra lokalsamfundet 0
Zypper Package Manager brugervejledning til openSUSE brugere og deres derivater 0
KDE Spectacle tilføjer OCR understøttelse for at kopiere tekst direkte fra skærmbilleder 0
Deaktiverer alle AI-funktioner i Firefox Web Browser 0
Gratis solenergi, skrivebord og valg 0

Seneste aktivitet

Driver til min scanner? 1
Affinity V3 2
copy hvordan 1
Sortering af filer - sort of... 4
Det der ikke må galt gik galt 5
VPN — 8 tests, 1 klar vinder i 2025 3
Lidt nostalgi 1
Forum. 1
BigLinux 1
Mount btrfs-device fra ext4 8
Skal vi være nervøse? 22
How to upgrade to LMDE 7 6
Kontakt til dansk-gruppen 3
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
Virksomheder og enheder der kører på Linux 11

© 2025 Linuxin og de respektive skribenter

Oprettet og drevet af nørder siden 2004 !