2014-10-10 87 views
0

我正在嘗試編寫一個腳本,以便它將檢查用戶是否輸入了有效的電話號碼,然後檢查records.txt文件。Unix shell用戶輸入電話號碼

我有以下代碼。但是,當我輸入電話號碼時,它不會識別它。

我也不確定如何對文本文件執行檢查?

echo "Enter a phone number as XXXXXXXX: " 
read phoneNumber 
while [ "$phoneNumber" != [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] ] 
    do 
    echo "Please enter a phone number as XXXXXXXX: " 
    read phoneNumber 
done 
echo $$phoneNumber 
pause 
+2

你有八位數的電話號碼嗎? – 2014-10-10 01:05:11

+0

是的,我們做。輸入電話號碼後,它會顯示「請輸入電話號碼爲XXXXXXXX:」while循環。它不會將八位數識別爲有效條目。 @ElliottFrisch – Seb 2014-10-10 01:26:33

+0

什麼是你的shebang行,你在debian或ubuntu上? – 2014-10-10 01:29:58

回答

0

把你的正則表達式中的一個變量,像這樣:pat="[0-9]{8}"

短語{8}表示重複前一個字符集。

在這種情況下,「上一個字符集」是[0-9]範圍內的任何值。

然後使用你所創建的兩個變量寫你while條件:

while [[ ! $phoneNumber =~ $pat ]] 

注意添加!的開始,否定括號內的表達。

當評估像這樣的正則表達式時,我們使用雙方括號[[ expression ]]以及=~來測試匹配。

+0

添加後,我收到以下錯誤。 ./testing.sh:6:./testing.sh:[[:未找到@Travis – Seb 2014-10-10 01:43:03

+1

哦,我明白了,你沒有使用bash。使用'/ bin/bash',我的代碼應該工作:) – Travis 2014-10-10 01:49:13

3

如果您想要驗證正好8位數的電話號碼,您需要在您的正則表達式中包含開始和結束錨,否則它會接受8位以上的數字。

#!/bin/bash 
echo "Enter a phone number as XXXXXXXX: " 
read phoneNumber 
pat="^[0-9]{8}$" 
while [[ ! $phoneNumber =~ $pat ]] 
    do 
    echo "Please enter a phone number as XXXXXXXX: " 
    read phoneNumber 
done 
echo $phoneNumber 
相關問題