我正在制作以下脚本,如果年份不是精确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位数字?
答案 0 :(得分:3)
答案 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
如果您愿意,也可以将这些与(...|...|...|...)
结合使用。