• 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 6 måneder 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 6 måneder 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 6 måneder 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 6 måneder 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 6 måneder 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 6 måneder 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 6 måneder 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 6 måneder 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

tst 0
Linux Fanpakke til LUG'er og foreninger 0
KDE Plasma 6.6 skrivebordsmiljø udgivet 0
GRUB 2.14 introducerer understøttelse af EROFS, forbedringer til Btrfs og LVM 0
KDE Plasma 6.6 tilføjer en funktion, som brugerne har spurgt efter i evigheder 0

Seneste aktivitet

USB problemer 4
Frankrig lancerer regeringsplan for skift til Linux desktops 4
Pepsi Challenge 18
Canonical planlægger Kontroversielle GRUB ændringer til Ubuntu 26.10 Secure Boot 1
Ubuntu MATE grundlægger Martin Wimpress træder tilbage efter 12 år 1
OpenShot 3.5 tager et spring fremad inden for ydeevne, AI og videoredigering 4
(U)hyggen breder sig 6
rsync og filsystem 7
Stor sejr for open source, da Tyskland støtter åbent dokumentformat 2
youtube-tui: Nyd YouTube fra terminalen som en professionel 5
Lukker og slukker 8
BigLinux 6
Det engang så elskede PCLinuxOS er tilbage - og det er stadig en fantastisk Windows erstatning 1
Mousam er en detaljeret desktop vejrapp til Linux 1
Hjælp til Handbrake - ingen dk-undertekster 1
luckyBackup 2
GIMP 30
Pinegrow på Debian 13 ? 4
Openmediavault 1
E-mail blues 9

© 2026 Linuxin og de respektive skribenter

Oprettet og drevet af nørder siden 2004 !