2014-09-23 80 views
0

我有一個文件,其中有一個到.sh文件的路由列表,但要執行腳本需要一個日期,它的日期是YYYYMMD。當我運行執行腳本列表的腳本時,我用read命令提示用戶輸入日期。只允許來自標準輸入的數字(讀取命令)

我的問題是,我需要100%確定用戶輸入的日期至少是所有數字,我該怎麼做?我已經確保輸入的最大字符數是8,所以我需要的只是允許用戶輸入數字。這是我迄今爲止所有的。

echo 'Input date (YYYYMMDD)' 
read -n 8 date 

任何想法?

謝謝。

回答

0

「從0到9的8個數字」 有一些幫助,從@Thomas我已經解決了我的問題後。解決方案是將輸入變量與正則表達式進行比較。但由於某種原因直接做這件事不起作用,所以我將正則表達式保存在一個變量中,然後比較這些變量。

reg='^[0-9]{8}$' 
while [[ ! $number =~ $reg ]] 
do 
echo 'The format is wrong' 
done 

^< - 從0 8號至9

$ < - - 行的

[0-9] {8} <開始時的線的端部

=〜< - 用正則表達式比較

希望這個答案幫助!

三江源

PS:如果有人知道爲什麼這樣做時,它比較沒有工作直接請讓我知道。

1

你應該使用while循環:

number="" 
while [[ ! $number =~ ^[0-9]{8} ]]; do 
    echo Please enter your age 
    read number 
done 

^[0-9]{8}意味着

+0

嗯,它不起作用,給我一個語法錯誤,我已經試過了,我試過 'while [[$ number!= [0-9] {8}]]' – Juanpe 2014-09-23 09:53:22

+0

@GaryPerry錯誤? – 2014-09-23 10:20:50

+0

'第50行:第52行的語法錯誤:〜(E)^ [0-9] {8}]]' – Juanpe 2014-09-23 10:32:31