• 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

14 år 8 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

14 år 8 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

14 år 8 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

14 år 8 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

14 år 8 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

14 år 8 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

14 år 8 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

14 år 8 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

llumos Unix-operativsystem, 0
Den er go 0
14. februar = I Love Free Software Day 0
Lokal fil-deling - for de dovne. 0
Linux fra begynder til professionel af O'Reilly 0

Seneste aktivitet

PCLinuxOS 24
Gode anmeldelser Zorin OS 17.3 2
"Intet realistisk alternativ" - mig i r*ven 15
Nulstilling af adgangskode 3
Ingen Mint 5
Linux App Store Flathub når 3 milliarder downloads 2
Digitaliseringsministeriet sætter gang i pilotprojekt om digital suverænitet 3
Mest sikker webbrowser 5
Firefox 2
Privatbeskeder 7
Backup/synkronisering? 3
BigLinux 5
Chatgpt satire 1
Læsning af databasefil i Firefox 2
Vanilla OS 15
Pepsi Challenge 4
Linuxin er nu migreret til Drupal 11 13
Et Dansk alternativ til Facebook 18
Ekstern Blu-ray-brænder, der fungerer med PCLinuxOS 3
Københavns og Aarhus Kommune dropper MS 9

© 2025 Linuxin og de respektive skribenter

Oprettet og drevet af nørder siden 2004 !