要测试变量是否是例如大于0的数字,您可以写:
((i > 0))
Run Code Online (Sandbox Code Playgroud)
但是,我如何测试变量是否not大于0的数字?
编辑
抱歉打字错误not a number greater than 0.
编辑2
为这个可怜的问题而烦恼.变量的值作为命令行参数传递,因此它可以是数字或不是.这也需要检查.
Dan*_*zar 11
i=15
if [[ ! $i -gt 10 ]]; then
echo "lalala"
fi
Run Code Online (Sandbox Code Playgroud)
Op *_*kel 10
要检查不是数字,您必须使用正则表达式进行测试.我已经使用-5,而不是0只是为了演示更一般的情况下(我的假设是,你使用整数):
#!/bin/bash
A=$1
if [[ $A =~ ^[\-0-9]+$ ]] && (( A > -5)); then
echo "A is number and is greater then -5"
else
echo "A is not a number or is <= -5"
fi
Run Code Online (Sandbox Code Playgroud)
如果要测试非整数,则必须在您的问题中澄清什么是数字.
关于Shell算术和Bash条件表达式的Bash手册部分清楚地介绍了这一点.
# Shell arithmetic
$ (( -1 <= 0 )); echo $?
0
# Conditional expression
$ [[ -1 -le 0 ]]; echo $?
0
# Negated conditional. Confusing, but possible.
[[ ! -1 -gt 0 ]]; echo $?
0
Run Code Online (Sandbox Code Playgroud)
简单吧?
但是,如果您在执行比较之前尝试测试数字是否实际上是整数,那么您可以使用这样的复合表达式来验证和比较名为int的变量:
[[ "$int" =~ ^[-+]?([1-9][[:digit:]]*|0)$ && "$int" -le 0 ]]
Run Code Online (Sandbox Code Playgroud)
请注意,比较确定验证的整数是否"小于或等于零",而不是否定它是正整数的断言.因此,只有当正则表达式验证为(可能已签名的)整数并且整数是带符号的负整数时,整个表达式才会返回true(例如,退出状态为零).
当然还有其他方法来构造这个表达式,但这是一个相当可读(如果是Bash特定的)解决方案.
| 归档时间: |
|
| 查看次数: |
24978 次 |
| 最近记录: |