带 bash 的条件否定

kev*_*vin 3 bash

我正在做一个基本的脚本,询问用户关于他/她的一些细节。事实是,如果用户没有输入年龄(数字),脚本会用一条消息警告,我想设置条件。我知道以某种方式放置了类似的东西:

如果 [ $age != [0-9] ]

但它不起作用。

有什么建议吗?

泰。

gle*_*man 8

选择你最喜欢的:所有这些都需要使用双括号条件结构

# 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]) ]]; ...
Run Code Online (Sandbox Code Playgroud)

在所有这些方法中,0-9都可以替换为 POSIX 字符类[:digit:]

if [[ $age == *[^[:digit:]]* ]]; ...
Run Code Online (Sandbox Code Playgroud)

文件:


Cha*_*ffy 5

Glenn 已经涵盖了 bash-only 的答案。甚至/bin/sh可以使用的 POSIX 方式是使用case而不是if

case $age in
  *[!0-9]*) echo "Age must not contain non-numeric digits";;
esac
Run Code Online (Sandbox Code Playgroud)