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