Rockwire
Rockwire

Reputation: 127

Compare bash variable

I need help with how to compare bash variable to a specific format.

i will read user input with read command

for example:
MyComputer:~/Home$ read interface
eth1
MyComputer:~/Home$ echo $interface
eth1

Now i need to check if "$interface" variable with IF loop(it should have "eth" in beginning and should contains numbers 0-9):

if [[ $interface=^eth[0-9] ]]
then
    echo "It looks like an interface name"
fi

Thanks in advance

Upvotes: 1

Views: 133

Answers (3)

gniourf_gniourf
gniourf_gniourf

Reputation: 46813

You can use bash's globs for this:

if [[ $interface = eth+([[:digit:]]) ]]; then
    echo "It looks like an interface name"
fi

(avoiding regexps removes one problem). Oh, and mind the spaces around the = sign, and also before and after [[ and ]].

Upvotes: 1

Idriss Neumann
Idriss Neumann

Reputation: 3838

You could use bash V3+ operator =~ as Andrew Logvinov said :

[[ $interface =~ ^eth[0-9]+$ ]] && # ...

Or :

if [[ $interface =~ ^eth[0-9]+$ ]]; then
    # ...
fi

Otherwise, you could use too egrep or grep -E (which is useful with older shells like sh...) :

echo "$interface"|egrep "^eth[0-9]+$" > /dev/null && # ...

Or :

if echo "$interface"|egrep "^eth[0-9]+$" > /dev/null; then
    # ...
fi

Upvotes: 0

Andrew Logvinov
Andrew Logvinov

Reputation: 21821

You can use regular expressions for this:

if [[ $interface =~ ^eth[0-9]+$ ]]
then
  ...
fi

Upvotes: 3

Related Questions