整数表达式预期BASH脚本IF语句

时间:2016-10-16 10:30:43

标签: bash shell if-statement

我正在尝试在文本文件中插入名称和数字。我为学习目的写了一个简短的脚本。

v= expr $# % 2
echo $v
if [ "$v" -eq 0 ]; then
    i=1
    while [ "$i" -lt $# ]
    do
        echo "$i    $i+1" >> database
        i=$((i+1))
    done
echo "User(s) successfully added \n\v"
else
    echo "Arguments are not complete";
fi

当我输入两个参数时,shell输出如下

0                     # (The value of variable v)
./myscript: line 3: [: : integer expression expected
Arguments are not complete  # (else statement is executed)

当我在第3行(如果语句)中将-eq替换为==时,错误信息消失了,但IF语句仍未按预期执行。

0              # (output of variable v)
Arguments are not complete # (else statement is executed)

2 个答案:

答案 0 :(得分:2)

您需要将变量赋值括在$(...)中("命令替换"):

v=$(expr $# % 2)

if声明中,-eq应该是正确的。另外,为了确保它有效,我会使用双方括号(这可能取决于你使用的shell):

if [[ ${v} -eq 0 ]]; then

答案 1 :(得分:0)

当前的问题是未能使用命令替换来捕获expr命令的结果:v=$( expr $# % 2 )。然而, 算术不再需要expr;像使用增量i一样使用算术表达式。

v=$(( $# % 2 ))