Bash if变量是一个整数

时间:2015-04-24 15:45:53

标签: bash variables if-statement integer

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

当我运行此操作时,我收到语法错误。

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

2 个答案:

答案 0 :(得分:1)

你最好否定这样的情况:

if [[ ! "$f1" =~ ^[0-9]+$ ]]; then 
  exit 1
fi

请注意正则表达式的[[]]语法以及!否定它。然后,我们使用=~作为正则表达式。

测试

$ r=23a
$ [[ ! "$r" =~ ^[0-9]+$ ]] && echo "no digit" || echo "digit"
no digit
$ r=23
$ [[ ! "$r" =~ ^[0-9]+$ ]] && echo "no digit" || echo "digit"
digit

答案 1 :(得分:1)

我总是喜欢使用相等test构造的整数测试:

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

如果var不是整数,则由于生成错误而导致相等失败。它也符合POSIX,因为它不依赖于字符类或bash [[构造。