2014-09-23 60 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