Reputation: 43
I am trying to perform a simple comparison within an if statement
basically it is taking the input from a user and then checking to verify that it is a proper entry.
This specific script is checking serial numbers.
read -p "enter in you serial number: serial_number
if [[ $serial_number == FOO[A-Z0-9]{3}-[A-Z0-9]{4} ]]
then echo -e "validation passed"
else echo -e "validation failed"
fi
However if I enter FOO123-ABCD, I get validation failed.
The only way I have been able to get it to work is much uglier
if $serial_number == [A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9]-[A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9] ]]
Is there something I am doing wrong with the curly braces or is there some switch I have to use in order to compare extended expressions?
So far I have tried:
[[ "$serial_number" == FOO[A-Z0-9]{3}-[A-Z0-9]{4} ]]
[[ "$serial_number" == "FOO[A-Z0-9]{3}-[A-Z0-9]{4}" ]]
[[ "${serial_number}" == FOO[A-Z0-9]{3}-[A-Z0-9]{4} ]]
[[ "${serial_number}" == "FOO[A-Z0-9]{3}-[A-Z0-9]{4}" ]]
[[ "$serial_number" =~ FOO[A-Z0-9]{3}-[A-Z0-9]{4} ]]
[[ "$serial_number" =~ "FOO[A-Z0-9]{3}-[A-Z0-9]{4}" ]]
[[ "${serial_number}" =~ FOO[A-Z0-9]{3}-[A-Z0-9]{4} ]]
[[ "${serial_number}" =~ "FOO[A-Z0-9]{3}-[A-Z0-9]{4}" ]]
Upvotes: 1
Views: 66
Reputation: 47020
This is working fine for me:
read -p "enter in you serial number:" serial_number
echo ">>$serial_number<<"
if [[ "$serial_number" =~ ^FOO[A-Z0-9]{3}-[A-Z0-9]{4}$ ]]; then
echo -e "validation passed"
else
echo -e "validation failed"
fi
Note you need the ^
and $
. Else it's checking for an occurrence anywhere in the string (like egrep
).
Upvotes: 3