如果变量是整数,则使用Bash

如果变量是整数,则使用Bash,bash,variables,if-statement,integer,Bash,Variables,If Statement,Integer,我试图在bash中编写一个if语句,如果提供的变量不是整数,该语句将退出。我最终将把这个if语句嵌套在while循环中 当我运行这个时,我得到了一个语法错误 #!/bin/bash if [ $f1 != ^[0-9]+$ ] then exit 1 fi 你最好像这样否定这个条件: if [[ ! "$f1" =~ ^[0-9]+$ ]]; then exit 1 fi 注意正则表达式的[[和]语法以及来否定它。然后,我们对正则表达式使用=~ 试

我试图在bash中编写一个if语句,如果提供的变量不是整数,该语句将退出。我最终将把这个if语句嵌套在while循环中

当我运行这个时,我得到了一个语法错误

#!/bin/bash
if [ $f1 != ^[0-9]+$ ]
    then 
        exit 1 
    fi 

你最好像这样否定这个条件:

if [[ ! "$f1" =~ ^[0-9]+$ ]]; then 
  exit 1
fi
注意正则表达式的
[[
]
语法以及
来否定它。然后,我们对正则表达式使用
=~

试验
我一直喜欢使用等式
test
结构的整数测试:

[ $var -eq $var 2>/dev/null ] || exit 1

如果
var
不是整数,则由于生成错误,等式将失败。它也与POSIX兼容,因为它不依赖字符类或bash
[[[
构造。

按整数,您是包括负整数还是只包括正整数?非常感谢您能向我解释为什么这很重要,以及此命令如何使其正确工作吗?请注意[[和]]语法以及“$var”=~。如果您想要负整数,只需在正则表达式的开头添加一个-?(可选'-'):[[!“$f1”=~-?[0-9]+$]@这一点在中得到了很好的解释。特别是当它谈到
!=
时,会根据模式检查
,如果不匹配则为-TRUE
[ $var -eq $var 2>/dev/null ] || exit 1