use*_*369 5 testing bash comparison return function
我一直在尝试编写一个 bash 函数来检查变量是否是整数。下面脚本中的 is_number 函数执行此检查。
当我运行它时(测试值为 1234),我收到以下错误消息:
./test_n2.sh: line 13: [: Checking 1234
1234: integer expression expected
n is not an integrer
我很困惑:该函数返回 $?,在我使用 grep 进行的单行测试中,它的整数值被正确设置为 0。主块中的整数比较是通过 [ "$retval" -eq 0 ] 完成的,据我所知,这是测试整数的正确形式。
有人可以帮忙吗?
#!/usr/bin/env bash
function is_number {
    number=$1
    echo "Checking $number"
    echo $number | /bin/egrep '^[0-9]+$'    
    return $?
}
n=1234
retval=`is_number $n`
if [ "$retval" -eq 0 ]; then
    echo n is an integer
    exit 0
fi
echo n is not an integrer
exit 1
当您使用反引号或分配变量时$(...),它会获取命令的标准输出。命令的返回值放在变量中$?。所以你应该这样做:
is_number $n
retval=$?
或者你可以简单地写:
if is_number $n; then
    echo n is an integer
    exit 0
fi