我正在编写一个基础脚本,要求用户提供一些关于他/她的细节。现在的问题是,如果用户没有输入年龄(数字),那么我想用一个消息警告来提示。我知道可以使用以下方式:
if [ $age != [0-9] ]
但它根本不起作用。
有什么建议吗?
谢谢。
我正在编写一个基础脚本,要求用户提供一些关于他/她的细节。现在的问题是,如果用户没有输入年龄(数字),那么我想用一个消息警告来提示。我知道可以使用以下方式:
if [ $age != [0-9] ]
但它根本不起作用。
有什么建议吗?
谢谢。
# is not all digits, regular expression
if [[ ! $age =~ ^[0-9]+$ ]]; ...
# contains a non-digit, regular expression
if [[ $age =~ [^0-9] ]]; ...
# contains a non-digit, glob pattern
if [[ $age == *[^0-9]* ]]; ...
# is not all digits, extended glob pattern
if [[ $age != +([0-9]) ]]; ...
在所有这些方法中,0-9
可以替换为POSIX字符类[:digit:]
if [[ $age == *[^[:digit:]]* ]]; ...
文档:
Glenn已经讲解了仅适用于bash的方法。即使使用/bin/sh
,也可以采用POSIX方式,使用case
代替if
:
case $age in
*[!0-9]*) echo "Age must not contain non-numeric digits";;
esac
man test
。对于通配符模式匹配,您需要使用 bash 构造[[ ... ]]
。 - user1934428