外壳脚本是数字控制


echo
echo -e "33[31m GAME - DB BUİLD! 33[0m"
echo
echo -e "33[32m Choose What to be BUILDED; 33[0m"
echo -e "33[36m 
1 - GAME n 
2 - DB n
3 - GAME + DB 33[0m"
echo
echo -e "33[32m Enter number to select ENTER. 33[0m"
echo
read build_file_cont
while [ $build_file_cont -lt 1 ] || [ $build_file_cont -gt  3 ]; do
clear
echo "If you have done wrong, try again.;"
echo
echo -e "33[32m Choose What to be BUILDED; 33[0m"
echo -e "33[36m 
1 - GAME n 
2 - DB n
3 - GAME + DB 33[0m"
echo -e "33[32m Enter number to select ENTER. 33[0m"
echo
read build_file_cont
done

正如您在上面看到的,我只检查您是否在 1 到 3 之间输入,但是如果未输入数值,则程序仍然可以工作。

我想检查用户是否没有输入数值。

如何使其仅输入数值。

在数字上下文中比较的非数值,在您执行此操作时,将被视为零,即小于 1。

至于测试,一个值是数字,我猜你的意思是测试它是一个整数,因为 POSIX shell 无论如何都不支持分数算术,而且你也没有模式匹配来进行比较,比如说,bash 或 zsh。

模式匹配在参数扩展中可用。${build_file_cont#*[^0-9]}将返回变量的内容,但删除最小的前缀,这将满足#之后的模式。如果build_file_cont仅包含数字,则模式不匹配,结果与原始结果相同:

if [ "${build_file_cont} =  "${build_file_cont#*[^0-9]}" ]
then
# build_file_cont is numeric
...
fi

但这仍然没有抓住负数的情况。我会单独查询它们:

abs=${build_file_cont#-}
if [ $abs = $build_file_cont }
then
# $build_file_cont is not negative
else
# $build_file_cont is the negative of $abs
# Verify that $abs contains only digits
fi

最后,在测试其他内容之前,我会摆脱前导/尾随/嵌入空格。为此,您必须恢复到外部实用程序(tr(:

build_file_cont=$(echo $build_file_cont|tr -d ' ')

相关内容

最新更新