我正在编写一个小脚本来轻松捕获权重,这些权重是通过使用read -p
的用户输入获取的。
我希望所有捕获的权重为4个字符,十进制数字,格式为 XX.X 。例如 30.2 千克。
#!/bin/bash
# take input from prompt (-p) and store it in $varweight
read -p 'Enter weight in kg: ' varweight
如何确保用户只能输入该格式的十进制数字?
谢谢您的帮助。
答案 0 :(得分:3)
一种方法是使用正则表达式并声明长度以消除误报(可选)。当然,由于bash
不符合POSIX,下面的内容将需要~
shell
str="30.4"
re='^[[:digit:]]{2}\.[[:digit:]]$'
if [[ $str =~ $re ]]; then
echo 'true'
fi
在符合POSIX的外壳上,尽管您可以使用case
语句
case $str in
[0-9][0-9].[0-9]) echo good ;;
*) echo bad;;
esac
更好的POSIX兼容工具是使用expr
进行正则表达式匹配。
if expr "$str" : '[[:digit:]]\{2\}\.[[:digit:]]$' > /dev/null; then
echo "true"
fi