我试图在bash中写一个if语句,如果提供的变量不是整数,它将退出。我最终会在while循环中嵌入这个if语句。
当我运行此操作时,我收到语法错误。
#!/bin/bash
if [ $f1 != ^[0-9]+$ ]
then
exit 1
fi
答案 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 [[
构造。