首页 > 解决方案 > Bash 脚本 while 循环不起作用:“预期 -le 一元运算符”

问题描述

我正在尝试像这样运行 bash 脚本:

#!/bin/bash

set i=1991

while [ $i -le 2017 ]
do
    echo "looping and doing stuff"
    $i++
done
echo all done

我收到以下错误:

[: -le: unary operator expected

我也尝试过像这样更改代码:

 #!/bin/bash

set i=1991


while (( $i <= 2017 ));
do
    echo "looping";
    (( $i++ ));
done

echo ALL done

这给了我这个错误:

((: <= 2017 : syntax error: operand expected (error token is "<= 2017 ")

我试过这个:

#!/bin/bash

set i=1991

while [ "$i" -le "2017" ]
do
    echo "looping"
    $i++
done

echo ALL done

我明白了:

[: : integer expression expected

我认为这是一个愚蠢的语法错误,但不幸的是我似乎无法弄清楚。我的 bash 版本是 4.3.48。

谢谢!

标签: bashubuntu-16.04

解决方案


set用于设置位置参数,不是普通变量。

$ unset i
$ set i=1991
$ echo "$1"
i=1991
$ echo "$i"

$

是的i=1991单个参数set,被视为文字字符串,而不是任何类型的赋值。

只需放下set

i=1991
while (( i < 2017 )); 
  ...
  ((i++))
done

推荐阅读