Teste med regex direkte i bash? [LØST]
Jeg har et lille script hvor man skal indtaste en firecifret kode. Denne kode validerer jeg så med:
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 ?
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 ?
Kommentarer8
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"
Joh, men jeg skal arbejde
if [ ! $CodeOk ]; then
zenity --title="Kodetest" --text="Koden skal være på præcis 4 cifre." --info
exit
fi
Så kan du
echo $Code | egrep --quiet "^[0-9]{4}" || (zenity --title="Kodetest" --text="Koden skal være på præcis 4 cifre." --info && exit)
Dit forslag i #3 er en god
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.
Hmm, det starter fint zenity
Nå, nu fandt jeg så ud af
Dette virker perfekt:
CodeOk=$(echo $Code | egrep '^[0-9]{4}$')
=~ operator
if [[ "$Code" =~ ^[0-9]{4}$ ]]
then
echo "god firecifret kode"
else
echo "fejl"
fi
Super, det var præcis
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?