2013-11-09 255 views
1

我需要幫助,瞭解如何將bash變量與特定格式進行比較。比較bash變量

我會讀與讀命令用戶輸入

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

現在,我需要檢查,如果「$接口」變量與IF環(它應該有「ETH」中開始,並應包含數字0-9) :

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

在此先感謝

回答

3

您可以使用正則表達式是:

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

我可以在'if [[$ interface =〜^ eth [0-9] + $]]'中理解^然而您能否解釋在$ bash中使用〜和+ $ – Rockwire

+0

這是一個正則表達式。 '=〜'是匹配的運算符,'+'表示前一個'[]'中的內容應該出現1次或多次。我認爲'[[]]'風格不是可移植的,所以應該避免這種情況?! – EverythingRightPlace

+0

謝謝你的回答 – Rockwire

0

你可以使用bash的V3 +運營商=~安德魯Logvinov說:

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

或者:

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

否則,你可以使用太多egrepgrep -E(這是與舊炮彈像SH有用...):

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

或者:

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

你可以使用bash的水珠此:

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

(避免正則表達式刪除一個問題)。哦,並且介意=標誌周圍的空間,以及[[]]之前和之後的空格。