使用bash脚本选择的确切年份

时间:2017-03-26 17:10:13

标签: linux bash unix sh

我正在制作以下脚本,如果年份不是精确4位的数字,则会抛出错误。

到目前为止,我有以下代码,但唯一的问题是它接受的数字多于4,我想将其限制为4位数。

#!/bin/bash

read -p "Enter year " y
while [[ -z $y || $y =~ [A-Za-z]+ || ! $y =~ [0-9]{4} ]]; do
            read -p "Enter the year in a valid format [yyyy] " y
done
echo "Selected year is: $y"

输出 -

 Enter the year in a valid format [yyyy] vrgege
 Enter the year in a valid format [yyyy] vegter
 Enter the year in a valid format [yyyy] 123
 Enter the year in a valid format [yyyy] 12345
 Selected year is: 12345 

它不接受少于4位但接受超过4位数字。

任何人都可以建议,如何设定条件才能获得精确的4位数字?

2 个答案:

答案 0 :(得分:3)

替换

[0-9]{4}

通过

^[0-9]{4}$

只匹配四个数字。

请参阅:The Stack Overflow Regular Expressions FAQ

答案 1 :(得分:0)

没有基本原理,为了便携性,我建议

case $y in
([0-9][0-9][0-9][0-9])
   printf "A four digit year, OK\n"
   ;;
([0-9][0-9][0-9])
   printf "A three digit year, OK\n"
   ;;
([0-9][0-9])
   printf "A two digit year, OK\n"
   ;;
([0-9])
   printf "A one digit year, OK\n"
   ;;
(*)
   printf "NOT OK\n"
esac

如果您愿意,也可以将这些与(...|...|...|...)结合使用。