只接受 4 个字符长的十进制数字作为用户输入以供读取

Only accept 4 character long, decimal numbers as user input for read

我正在编写一个小脚本来轻松捕获权重,这些权重是通过 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

如何确保用户只能输入该格式的十进制数字?

感谢您的帮助。

一种方法是使用正则表达式并声明长度以消除误报(可选)。当然下面需要 bash shell 因为 ~ 不符合 POSIX

str="30.4"
re='^[[:digit:]]{2}\.[[:digit:]]$'

if [[ $str =~ $re ]]; then
    echo 'true'
fi

在符合 POSIX 的 shell 上,尽管您可以使用 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