我一直试图找出一种方法来测试参数是否是使用命令expr的数字。
到目前为止我的剧本中写道:
expr $1 + 1 2>/dev/null
if [ $? -eq 2 -o $1 -lt 0 ]
then
echo "$1 is not a positive integer" >&2
exit 1
fi
我在这里要做的是为变量添加1。如果这引发错误(这意味着该变量不是数字),结果将被发送到/ dev / null。 之后,我测试返回代码是否为2或变量是否小于0。 然而,这似乎不起作用......任何想法?
P.S。请记住,我必须使用expr
答案 0 :(得分:0)
无论$1
的值是什么,都会评估您的条件,这意味着如果$1
不是数字,shell将抛出语法错误。
我首先检查expr
是否失败(不要预先假设错误代码,只测试非零)。如果是,我设置错误标志。
然后,如果没有设置错误标志,我知道这是一个数字,然后我检查是否为正(错误标志保护不使用非整数评估$1
。
不确定这是最好的方法,但有效:
error=0
expr $1 + 1 2>/dev/null >/dev/null
if [ $? -ne 0 ] ; then
error=1
fi
if [ $error -eq 0 ] ; then
if [ $1 -lt 0 ] ; then
error=1
fi
fi
if [ $error -eq 1 ] ; then
echo "$1 is not a positive integer" >&2
exit 1
fi
试验:
$ exprtest.sh foo
foo is not a positive integer
$ exprtest.sh 4
$ exprtest.sh -5
-5 is not a positive integer
注意:0
通过了测试,但有些人可能会认为它不是严格意义上的正整数。
答案 1 :(得分:0)
你也可以试试这个;
#!/bin/bash
expr $1 + 1 2>/dev/null >/dev/null
if [ $? -eq 2 ] || [ $1 -lt 0 ]
then
echo "$1 is not a positive integer" >&2
exit 1
fi
例如:
user@host:/tmp/test$ ./test.sh foo
foo is not a positive integer
user@host:/tmp/test$ ./test.sh 4
user@host:/tmp/test$ ./test.sh -5
-5 is not a positive integer