仅允许标准输入(读取命令)中的数字

问题描述 投票:1回答:3

我有一个文件,该文件包含到.sh文件的路由列表,但是要执行脚本,需要一个日期,该文件的日期为YYYYMMD。当我运行执行脚本列表的脚本时,我用read命令提示用户输入日期。

我的问题是,我需要100%确保用户输入的日期至少是所有数字,我该怎么做?我已经确保输入的最大字符数是8,所以我所需要的只是允许用户输入数字。这是我到目前为止所拥有的全部。

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

有什么想法吗?

谢谢。

linux ksh
3个回答
1
投票

您应该使用while循环:

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

^[0-9]{8}表示“ 0至9之间的8个数字”


0
投票

得到@Thomas的帮助后,我解决了我的问题。解决方案是将输入变量与正则表达式进行比较。但是由于某些原因,直接执行此操作无效,因此我将正则表达式保存在变量中,然后比较了变量。

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

^

[[0-9] {8}

$

=〜

希望此答案有所帮助!

谢谢

PS:如果有人知道为什么直接进行比较时不起作用,请告诉我。


0
投票

我发现直到循环在许多情况下都可以完成此工作。

我在另一个论坛上找到了用于比较的语法,并且它起作用了,而其他语法却给我带来了错误。请注意,“ ..] + $”结尾,并包含[+-]?..或[+] ..(仅对于正数)。

read -n 8 date
until [[ $date=~ ^[+]?[0-9]+$ ]]
do
  echo "Oops! Positive integers only.."
  read -n 8 date
done
© www.soinside.com 2019 - 2024. All rights reserved.