我有一个文件,该文件包含到.sh文件的路由列表,但是要执行脚本,需要一个日期,该文件的日期为YYYYMMD
。当我运行执行脚本列表的脚本时,我用read
命令提示用户输入日期。
我的问题是,我需要100%确保用户输入的日期至少是所有数字,我该怎么做?我已经确保输入的最大字符数是8,所以我所需要的只是允许用户输入数字。这是我到目前为止所拥有的全部。
echo 'Input date (YYYYMMDD)'
read -n 8 date
有什么想法吗?
谢谢。
您应该使用while循环:
number=""
while [[ ! $number =~ ^[0-9]{8} ]]; do
echo Please enter your age
read number
done
^[0-9]{8}
表示“ 0至9之间的8个数字”
得到@Thomas的帮助后,我解决了我的问题。解决方案是将输入变量与正则表达式进行比较。但是由于某些原因,直接执行此操作无效,因此我将正则表达式保存在变量中,然后比较了变量。
reg='^[0-9]{8}$'
while [[ ! $number =~ $reg ]]
do
echo 'The format is wrong'
done
^
[[0-9] {8}
$
=〜
希望此答案有所帮助!
谢谢
PS:如果有人知道为什么直接进行比较时不起作用,请告诉我。
我发现直到循环在许多情况下都可以完成此工作。
我在另一个论坛上找到了用于比较的语法,并且它起作用了,而其他语法却给我带来了错误。请注意,“ ..] + $”结尾,并包含[+-]?..或[+] ..(仅对于正数)。
read -n 8 date
until [[ $date=~ ^[+]?[0-9]+$ ]]
do
echo "Oops! Positive integers only.."
read -n 8 date
done