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

时间:2019-03-06 16:34:28

标签: linux bash shell decimal posix

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

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

谢谢您的帮助。

1 个答案:

答案 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