只允许来自标准输入的数字(读取命令)
问题描述:
我有一个文件,其中有一个到.sh文件的路由列表,但要执行脚本需要一个日期,它的日期是YYYYMMD
。当我运行执行脚本列表的脚本时,我用read
命令提示用户输入日期。只允许来自标准输入的数字(读取命令)
我的问题是,我需要100%确定用户输入的日期至少是所有数字,我该怎么做?我已经确保输入的最大字符数是8,所以我需要的只是允许用户输入数字。这是我迄今为止所有的。
echo 'Input date (YYYYMMDD)'
read -n 8 date
任何想法?
谢谢。
答
“从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:如果有人知道为什么这样做时,它比较没有工作直接请让我知道。
答
你应该使用while循环:
number=""
while [[ ! $number =~ ^[0-9]{8} ]]; do
echo Please enter your age
read number
done
凡^[0-9]{8}
意味着
嗯,它不起作用,给我一个语法错误,我已经试过了,我试过 'while [[$ number!= [0-9] {8}]]' – Juanpe 2014-09-23 09:53:22
@GaryPerry错误? – 2014-09-23 10:20:50
'第50行:第52行的语法错误:〜(E)^ [0-9] {8}]]' – Juanpe 2014-09-23 10:32:31