bash中的条件否定

3

我正在编写一个基础脚本,要求用户提供一些关于他/她的细节。现在的问题是,如果用户没有输入年龄(数字),那么我想用一个消息警告来提示。我知道可以使用以下方式:

if [ $age != [0-9] ]

但它根本不起作用。

有什么建议吗?

谢谢。


我确信我之前已经回答过这个问题,但是重复的问题很难搜索到。 - Charles Duffy
1
这个回答解决了你的问题吗?如何在Bash中测试一个变量是否为数字? - Lenna
@kevin:test 命令只测试字符串的相等/不相等。请参阅 man test。对于通配符模式匹配,您需要使用 bash 构造 [[ ... ]] - user1934428
2个回答

7
选择你喜欢的方式:下列所有方式都需要使用双中括号条件结构
# 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:]]* ]]; ...

文档:


5

Glenn已经讲解了仅适用于bash的方法。即使使用/bin/sh,也可以采用POSIX方式,使用case代替if

case $age in
  *[!0-9]*) echo "Age must not contain non-numeric digits";;
esac

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接